swa*_*log 6 python multiprocessing
简而言之,我说有以下内容:
import multiprocessing
class Worker(multiprocessing.Process):
def __init__(self):
multiprocessing.Process.__init__(self)
print "Init"
self.value = None
def run(self):
print "Running"
self.value = 1
p = Worker()
p.start()
p.join()
print p.value
Run Code Online (Sandbox Code Playgroud)
我希望输出为:
Init
Running
1
Run Code Online (Sandbox Code Playgroud)
相反,它是
Init
Running
None
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么会这样吗?我不理解的是什么,我该如何正确地做到这一点?
谢谢.
unu*_*tbu 10
你说的那一刻p.start(),一个单独的过程分离出主要过程.将复制所有变量值.所以主进程有一个副本p,而分叉进程有一个单独的副本p.该Worker修改的派生进程的副本p.value,但主要进程的p.value仍然是None.
有许多方法可以在进程之间共享对象.在这种情况下,也许最简单的方法是使用mp.Value:
import multiprocessing as mp
class Worker(mp.Process):
def __init__(self):
print "Init"
mp.Process.__init__(self)
self.num = mp.Value('d', 0.0)
def run(self):
print "Running"
self.num.value = 1
p = Worker()
p.start()
p.join()
print p.num.value
Run Code Online (Sandbox Code Playgroud)
请注意,其mp.Value默认值为0.0.它无法设置为None.
| 归档时间: |
|
| 查看次数: |
6154 次 |
| 最近记录: |