2013-11-27 57 views
0

:)全局變量無效語法與多處理

我在玩多處理和Qt。我想創建一個變量,它是全局變量,當我關閉我的窗口時,在函數中使用它來殺死後臺進程。

import sys, multiprocessing, time 

def proc(): 
    while True: 
     print "Runinn'..." 
     time.sleep(1) 
    return 

def onExit(): 
    p.terminate() 
    QtCore.QCoreApplication.instance().quit 
    return 
. 
. 
. 
button.clicked.connect(onExit()) 
. 
. 
. 
global p=multiprocessing.Process(target=proc()) 
p.start() 

的解釋引發錯誤,

global p=multiprocessing.Process(target=proc()) 
      ^
SyntaxError: invalid syntax 
+0

對於它的價值,它看起來像'p'已經在全局名稱空間中。 「全球」聲明在這裏實際上什麼都不做...... – mgilson

回答

5

global只需要姓名投入全球範圍內的當前功能。分配必須單獨執行。

2

這不是你如何使用global

首先,代碼結構應該是這樣的:

global p 
p=multiprocessing.Process(target=proc()) 
p.start() 

注意如何申報了名爲全球在同一行,然後爲它分配一個不同的一個是全球語句下面。

其次,你只能這樣做一個函數,重新分配p。在外部或在不重新分配的功能中完成任何操作都不會產生任何效果。

最後,您需要定義p之前你叫onExit。再次,因爲onExit不會重新分配p,特別是因爲p已經是全球性的,所以您不需要執行global p

+0

它仍然不是全球性的,但那個錯誤消失了。 新的: p.terminate() NameError:全局名稱'p'未定義 – erbal

+0

@erbal - 是因爲你在定義'p'之前調用'onExit'。相反,首先定義'p'。 – iCodez

+0

謝謝你,你是對的! :) – erbal