例子:
from multiprocessing.dummy import Pool as ThreadPool
def testfunc(string):
print string
def main():
strings = ['one', 'two', 'three', ...]
pool = ThreadPool(10)
results = pool.map(testfunc, strings)
pool.close()
pool.join()
if __name__ == '__main__':
main()
这不会给我们清晰的结果,而在一行中只有一个结果:
one
two
three
但是网格物体具有随机的换行符,例如
one
two
three
four
five
...
为什么会发生?我可以在每个函数调用中使用一个换行符输出我的数据吗?
P.S.有时我什至没有换行符甚至空格!
P.P.S.在Windows下工作
最佳答案
print
是非原子操作,因此在不同的过程中,一个打印可以在中间被另一打印中断。您可以通过在其周围放置一个print
来防止两个进程同时调用Lock
。
from multiprocessing.dummy import Pool as ThreadPool
from multiprocessing import Lock
print_lock = Lock()
def testfunc(string):
print_lock.acquire()
print string
print_lock.release()
def main():
strings = ['one', 'two', 'three', 'four', 'five']
pool = ThreadPool(10)
results = pool.map(testfunc, strings)
pool.close()
pool.join()
if __name__ == '__main__':
main()