[英]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.