我有一个比较大的Python程序。运行它会生成多个进程(multiprocessing.Process
),这些进程通过各种事件和队列进行通信。我还有越来越多的命令行标志(用argparse处理),它们改变了各种数据路径或进程的执行。
目前,我将所有标志放在一个列表中,并在创建它们时将列表传递给每个进程。并非每个进程都使用每个标志,但这种方法意味着我只需在添加或删除标志时更新受影响的进程。然而,这变得复杂,因为我必须记住每个列表中每个标志的位置和不同的默认值。我考虑过创建一个命名元组来处理这些标志或只是传递ArgumentParser。
这些是一些既定的范式还是Pythonic方式来处理这种情况?
答案 0 :(得分:0)
我认为没有已建立的范例。但是,我不能在几种情况下建议一种对我有用的模式,不仅在Python中,而且在Ruby中也是如此。
不要存储直接在命令行中传递的标志,解析它们一次并将结果放入对象属性(您可以使用namedtuple
,但它并不总是最好的方式,我更喜欢我自己的班级。)
然后,不要将所有标志传递给新进程,而是要求它们等待队列中的配置对象,并将其作为第一件事发送到每个已启动的进程以保持其配置。这样的对象可以以不同的方式共享,但这取决于您的场景。
其他选项是pickle
这样的对象,并将其作为文件传递给每个已启动的进程加载,或编码pickling(例如base64
)并将其作为单个参数传递给命令行用于新流程。
很难为您的案例描述一个最佳模式,不知道您的代码的确切形式,共享的数量等等。