2014-02-14 62 views
1

我正在運行一個程序,它啓動一個隊列來回發送信息的進程。我無法獲得一個類(從Process進行子類化)在Windows中啓動(它在Linux上工作)。代碼的簡化版本是:進程子類無法在窗口中運行

from multiprocessing import Process, Queue 

class Client(Process): 
    def __init__(self, q): 
     super(Client, self).__init__() 
     self._q = q 

    def run(self): 
     self.startClient() 

    def startClient(self): 
     self._q.put('abc') 

class Other(object): 
    def start(self): 
     self.q = Queue() 
     self.client = Client(self.q) 
     self.client.start() 

開始處理(客戶端)不使「運行」(並因此startClient)被調用。

我知道一個簡單的解決方案是使用主入口點(如果__name__ =='__main__':),但這是一個較大的程序的一部分,不能通過該入口點進行訪問。

是否有任何其他方式可以讓這個工作在Windows上?

+0

您使用哪些代碼來運行該過程? – BrenBarn

+0

大型項目的主要模塊是什麼?它可以導入而不需要開始一些冗長的工作? –

+0

@BrenBarn:如果你把'其他'作爲一個更大的類來做一堆處理(包括它們之間的隊列設置的數據)。 「其他」課程是一個較大系統中的衆多課程之一。 – PeteOopNorf

回答

0

如果主模塊沒有使用if __name__ == '__main__':,你不想改變它,通過運行新的主要創建導入舊的主這樣一個新的主模塊,並啓動應用程序:

if __name__ == '__main__': 
    import main_module 
+0

Sry爲遲到的迴應。看來問題與我們使用的開發環境有關,即內部設置。但我很確定你給出的解決方案是正確的:)。 – PeteOopNorf

相關問題