【发布时间】:2018-07-12 04:45:30
【问题描述】:
我想同时运行函数 example() n 次,同时没有任何延迟,这个当前脚本能够运行 n 次,但每次调用之间几乎存在几毫秒的差异。我希望该功能同时被击中。有没有更好的方法呢? 我过去也使用过多进程,但如果我运行的次数超过 n=100,它会降低我的计算机速度。 请推荐一个好方法
import threading,argparse,sys,subprocess
from time import strftime
def example(a):
time= strftime("%H:%M:%S")
print("Hello" +a)
print(time) # It should be same for all n concurrent, since we want all to hit same time
def main(argv):
parser = argparse.ArgumentParser(description="Hello")
parser.add_argument("-n", type=str, dest="n")
parser.add_argument("-a", type=str, dest="a")
global verbose
global simulated
verbose = args.verbose
n = args.n
a = args.a
for counter in range(1, int(n) + 1):
try:
t = threading.Thread(name="thread" + str(counter), target=example, args=(a))
t.start()
except Exception as e:
print(e)
if __name__ == '__main__':
try:
ret = main(sys.argv[1:])
sys.exit(ret)
except Exception as ex:
print('Error' + str(ex))
sys.exit(1)
【问题讨论】:
-
“我使用了多进程”。唔?此代码未使用
multiprocessing,而是使用threading。两者有相当大的区别。特别是,multiprocessing不受 Global Interpreter Lock 的约束,就像threading那样。 -
嗨凯文,我的意思是我在线程之前尝试了多进程。而不是 t = threading.Thread(name="thread" + str(counter), target=example, args=(a,)) 我过去尝试过多处理: p = multiprocessing.Process(target=example, args=(a ,)) [我在上面的脚本中尝试了这个而不是 t],如果我给出的 n 超过 80 左右,我的电脑就会变慢......
标签: python multithreading concurrency multiprocessing python-multithreading