繁体   English   中英

Python Process子类中的共享变量

[英]Shared variable in Python Process subclass

我想知道是否有可能在Python Process子类中创建某种静态集来跟踪当前异步运行的进程类型。

class showError(Process):
    # Define some form of shared set that is shared by all Processes
    displayed_errors = set()

    def __init__(self, file_name, error_type):
        super(showError, self).__init__()
        self.error_type = error_type

    def run(self):
        if error_type not in set:
            displayed_errors.add(error_type)
            message = 'Please try again. ' + str(self.error_type)
            winsound.MessageBeep(-1)
            result = win32api.MessageBox(0, message, 'Error', 0x00001000)

            if result == 0:
                displayed_errors.discard(error_type)

这样,当我使用相同的error_type创建/启动多个showError进程时,将不会创建后续的错误窗口。 那么我们如何定义这个共享集呢?

您可以使用multiprocessing.Manager.dict (没有可用的set对象,但是可以以相同的方式使用dict )并在所有子流程之间共享。

import multiprocessing as mp

if __name__ == "__main__":
    m = mp.Manager()
    displayed_errors = m.dict()
    subp = showError("some filename", "some error type", displayed_errors)

然后更改showError.__init__以接受共享的字典:

def __init__(self, file_name, error_type, displayed_errors):
    super(showError, self).__init__()
    self.error_type = error_type
    self.displayed_errors = displayed_errors

然后这样:

displayed_errors.add(error_type)

成为:

self.displayed_errors[error_type] = 1

和这个:

displayed_errors.discard(error_type)

成为:

try:
    del self.displayed_errors[error_type]
except KeyError:
    pass

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM