簡體   English   中英

如何對類實例進行多處理

[英]How to do multiprocessing with class instances

該程序旨在在網絡上的各個IP上設置進程創建偵聽器。 代碼是:

import multiprocessing
from wmi import WMI

dynaIP = ['192.168.165.1','192.168.165.2','192.168.165.3','192.168.165.4',]

class WindowsMachine:
    def __init__(self, ip):
        self.ip = ip

        self.connection = WMI(self.ip)
        self.created_process = multiprocessing.Process(target = self.monitor_created_process, args = (self.connection,))
        self.created_process.start()

    def monitor_created_process(self, remote_pc):
        while True:
            created_process = remote_pc.Win32_Process.watch_for("creation")
            print('Creation:',created_process.Caption, created_process.ProcessId, created_process.CreationDate)
            return created_process

if __name__ == '__main__':
    for ip in dynaIP:
        print('Running', ip)

        WindowsMachine(ip)

運行代碼時,出現以下錯誤:

Traceback (most recent call last):
  File "U:/rmarshall/Work For Staff/ROB/_Python/__Python Projects Code/multipro_instance_stack_question.py", line 26, in <module>
    WindowsMachine(ip)
  File "U:/rmarshall/Work For Staff/ROB/_Python/__Python Projects Code/multipro_instance_stack_question.py", line 14, in __init__
    self.created_process.start()
  File "C:\Python33\lib\multiprocessing\process.py", line 111, in start
    self._popen = Popen(self)
  File "C:\Python33\lib\multiprocessing\forking.py", line 248, in __init__
    dump(process_obj, to_child, HIGHEST_PROTOCOL)
  File "C:\Python33\lib\multiprocessing\forking.py", line 166, in dump
    ForkingPickler(file, protocol).dump(obj)
_pickle.PicklingError: Can't pickle <class 'PyIID'>: attribute lookup builtins.PyIID failed

我查看了有關此問題的其他問題,但我認為沒有一個問題可以清楚地說明酸洗類實例的解決方法。

有人能夠證明這一點嗎?

這里的問題是,多處理程序會腌制過程中的參數以便將它們傳遞出去。 WMI不可腌制,因此不能作為參數傳遞給multiprocessing.Process

如果您希望這樣做,可以執行以下任一操作:

  • 切換為使用線程而不是進程(請參閱threading模塊)
  • monitor_created_process創建WMI對象

我建議使用前者,因為在創建成熟的過程中似乎沒有多大用處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM