例子:

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()

09-11 19:20
查看更多