运行 一个简单的多线程代码时出错
got an error while running a simple multithreading code
我做了一项研究,但我唯一看到的是 if __name__ == '__main__'
的东西,这没有帮助。你能帮我找出问题吗?
代码如下:
import multiprocessing
from multiprocessing import *
manager = Manager()
sharedVar = manager.Value()
sharedVar.value = 0
def worker():
sharedVar.value = 1432
if __name__ == '__main__':
process1 = multiprocessing.Process(target=worker)
process1.start()
process1.join()
print(sharedVar)
和错误:
raise RuntimeError('''
RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.
This probably means that you are not using fork to start your
child processes and you have forgotten to use the proper idiom
in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce an executable.
Process finished with exit code -1
问题是您仍然在 if __name__ == '__main__':
块之外初始化 Manager
,因此当新进程产生时,它会尝试创建此 class 的另一个实例,这就是发生错误的地方。你还有第二个问题 - manager.Value()
需要两个参数 - 'typecode' and 'value'.
这里是您的代码的稍作修改的工作版本:
from multiprocessing import Manager, Process
def worker(sharedValue):
sharedValue.value = 1432
if __name__ == '__main__':
manager = Manager()
sharedVar = manager.Value("i", 0)
process1 = Process(target=worker, args=(sharedVar,))
process1.start()
process1.join()
print(sharedVar)
我做了一项研究,但我唯一看到的是 if __name__ == '__main__'
的东西,这没有帮助。你能帮我找出问题吗?
代码如下:
import multiprocessing
from multiprocessing import *
manager = Manager()
sharedVar = manager.Value()
sharedVar.value = 0
def worker():
sharedVar.value = 1432
if __name__ == '__main__':
process1 = multiprocessing.Process(target=worker)
process1.start()
process1.join()
print(sharedVar)
和错误:
raise RuntimeError('''
RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.
This probably means that you are not using fork to start your
child processes and you have forgotten to use the proper idiom
in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce an executable.
Process finished with exit code -1
问题是您仍然在 if __name__ == '__main__':
块之外初始化 Manager
,因此当新进程产生时,它会尝试创建此 class 的另一个实例,这就是发生错误的地方。你还有第二个问题 - manager.Value()
需要两个参数 - 'typecode' and 'value'.
这里是您的代码的稍作修改的工作版本:
from multiprocessing import Manager, Process
def worker(sharedValue):
sharedValue.value = 1432
if __name__ == '__main__':
manager = Manager()
sharedVar = manager.Value("i", 0)
process1 = Process(target=worker, args=(sharedVar,))
process1.start()
process1.join()
print(sharedVar)