我想知道是否可以在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进程时,将不会创建后续错误窗口。那么我们如何定义这个共享集呢?
答案 0 :(得分:3)
您可以使用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