Python似乎删除了Process?

时间:2015-11-05 16:54:59

标签: python variables multiprocessing

这是我创建的示例。基本上,我将两个进程定义为全局变量(是的,我知道这是不好的做法,但我正在这样做以显示问题)。 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())

但是,正如您所看到的,我已打印测试以确认printerkiller在定义之后和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,突然他们没有(导致NameErrorprinter正确打印!这里发生了什么?这个问题是否特定于我一般使用过程或变量本身吗?

(如果有人要回答multiprocessing这里没有必要,他们应该知道给定的例子是一个程序的减少的例子,绝对是这样做的)

0 个答案:

没有答案