1
使用此示例,我想捕獲信號。並在類中打印var。mulitprocess.process類中的信號處理程序,無法獲取類的val
import signal
import time
import multiprocessing
class test(multiprocessing.Process):
def __init__(self):
super(test,self).__init__()
self.a = []
def handle(self,sig,frm):
print "in hander selfid " , id(self)
print "in handler self.a " , self.a
print "in handler self.a id " , id(self.a)
def run(self):
self.a = [1 ,2]
print "in run selfid " , id(self)
print "in run self.a id " , self.a
print "in run self.a id is " , id(self.a)
while 1:
time.sleep(10)
test_1 = test()
signal.signal(signal.SIGALRM,test_1.handle)
test_1.run()
time.sleep(2)
signal.alarm(1)
使用ubunut12.04蟒蛇2.7答案是這樣的:
蟒蛇test.py
in run selfid 139880313607120
in run self.a id [1, 2]
in run self.a id is 139880313975872
in hander selfid 139880313607120
in handler self.a []
in handler self.a id 139880313580432
,而我期望的答案:
in handler self.a is [1,2]
把signal.signal(signal.SIGALRM,test_1.handle)
在self.__init__
不起作用。
我用這個方法得到:當父母被SIGTERM殺死的時候。信號處理器 defun在父代中,將迭代它的子進程列表來殺死它。並在__init__
樂趣註冊。孩子列表進入run()就像這個例子一樣有趣。 我打印自我的id。當處理程序被調用時,自我是一樣的。不過,self.a與 不同。 作爲打印演示,運行被稱爲first,然後處理程序.so self.a應該是相同的? 那麼,這裏有什麼問題?
謝謝。你是對的。我曾嘗試將__init__函數放入函數中。事實上,在調用start()後創建了進程。 – jiamo