这是我创建的示例。基本上,我将两个进程定义为全局变量(是的,我知道这是不好的做法,但我正在这样做以显示问题)。 killer
进程的目标是kill_printer
函数,它在5秒后终止printer
进程。这两个进程都是global
个对象,所以这不应该是个问题。
from time import sleep
from multiprocessing import Process
def kill_printer():
print('printer' in globals() and 'killer' in globals())
sleep(5)
printer.terminate()
def print_hello():
while True:
print('hello')
sleep(1)
if __name__ == '__main__':
global printer
global killer
printer = Process(target=print_hello)
killer = Process(target=kill_printer)
printer.start()
killer.start()
print('printer' in globals() and 'killer' in globals())
但是,正如您所看到的,我已打印测试以确认printer
和killer
在定义之后和printer
中需要kill_printer
时都是全局变量。这是因为当程序运行时,结果如下:
True
hello
False
hello
hello
hello
hello
hello
Process Process-2:
Traceback (most recent call last):
File "C:\Users\Alex\AppData\Local\Programs\Python\Python35\lib\multiprocessing\process.py", line 254, in _bootstrap
self.run()
File "C:\Users\Alex\AppData\Local\Programs\Python\Python35\lib\multiprocessing\process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\Alex\Google Drive\EES\test.py", line 7, in kill_printer
printer.terminate()
NameError: name 'printer' is not defined
hello
hello
hello
hello
一分钟两个进程都在globals
,突然他们没有(导致NameError
,printer
正确打印!这里发生了什么?这个问题是否特定于我一般使用过程或变量本身吗?
(如果有人要回答multiprocessing
这里没有必要,他们应该知道给定的例子是一个程序的减少的例子,绝对是这样做的)