我试图从不同的线程访问全局字典。一个完整的例子如下:从Python线程/进程更新全局对象
results = {0: 'pass'}
def checkResult(thread_num, result_map):
while(True):
results[thread_num] = 'fail'
print('Thread results : '+str(results))
time.sleep(5)
multiprocessing.Process(target = checkResult, args=(1, results)).start()
multiprocessing.Process(target = checkResult, args=(2, results)).start()
while(True):
print('Main results: '+str(results))
time.sleep(3)
的“主要成果”只看到线程0,而“线程结果”只修改字典按自己的线程的结果:
Thread results : {0: 'pass', 1: 'fail'}
Main results: {0: 'pass'}
Thread results : {0: 'pass', 2: 'fail'}
Main results: {0: 'pass'}
Thread results : {0: 'pass', 1: 'fail'}
Thread results : {0: 'pass', 2: 'fail'}
Main results: {0: 'pass'}
^C
看来, “结果”映射是按值传递的,而不是通过引用传递。有没有办法让线程引用原始全局映射,而不是让每个线程都使用它自己的副本?
我知道我应该使用锁定来避免一个线程覆盖另一个线程的更改(并且我计划在实际解决方案中这样做)的问题。现在,尽管我只是想让所有线程都使用通用的结果字典。
您正在使用多个进程,而不是线程。 – syntonym
检查[这](http://stackoverflow.com/questions/10797998/is-it-possible-to-multiprocess-a-function-that-returns-something-in-python)答案,它解释了如何传递结果从子进程返回。 – FujiApple