我的代码
import time
from multiprocessing.pool import ThreadPool
from concurrent.futures import ThreadPoolExecutor
def print_function(tests):
while True:
print tests
time.sleep(2)
executor = ThreadPoolExecutor(max_workers=2)
for i in range(5):
a = executor.submit(print_function(i))
输出0 0 0 0 0 0 0 0...
但是我想要012345012345012345…
我该怎么做?
在行
a = executor.submit(print_function(i))
^^^^^^^^^^^^^^^^^
您已经在调用函数了。由于它有一个while True
,它永远不会结束,因此永远不会到达submit()
。
解决方案是将函数作为引用和自变量分别传递:
a = executor.submit(print_function, i)
但是,请注意,您不会得到您喜欢的输出(012345
(,因为a(范围将停止在4,b(您只启动2个工作进程,c(操作系统将选择运行哪个进程,因此这看起来是随机的(更像310254
(。