当前位置: 首页 > 知识库问答 >
问题:

我可以运行应用程序。从一个使用多重处理的进程中的Main Loop?

袁翰池
2023-03-14

我正在开发一个应用程序,它使用多个进程。

每个进程都是由原始python进程创建的(即,涉及一个级别的分叉)。

为了在子流程死亡的情况下优雅地终止,我希望我的主流程监视每个子流程的状态,例如:

while lifeIsGood:
    for process in processes:
        if not process.is_alive()
            lifeIsGood = False
            break
    sleep(1)

# forcibly reap the children

我也希望这个应用程序呈现一个wxpython GUI。但是,由于我希望主进程做什么,我不能使阻塞调用App。在该过程中的Main Loop

我建议的解决方案是运行应用程序。分叉后在子进程(进程子类)的线程中的MainLoop

然而,这会导致灰色(无响应)GUI。

为了从子进程(后叉)运行GUI线程,我需要设置一些特殊的东西吗?

(我知道我可以在一个单独的子进程中运行终止代码,因为进程列表是在分叉前创建的。然而,从设计的角度来看,在主流程中使用该代码会更干净。

这是不容易做到的,因为收割进程必须是它希望查询或终止的任何子进程的父进程。)

共有1个答案

幸鸿轩
2023-03-14

我非常确定您需要将wx主循环作为主进程,并从线程中启动多进程。因此,您可以混合使用线程和多处理模块。

查看以下资源:

  • http://wiki.wxpython.org/MultiProcessing
  • wxPython非阻塞GUI线程和多处理
  • wxpython GUI和多处理-如何从长时间运行的进程发回数据
  • http://www.blog.pythonlibrary.org/2012/08/03/python-concurrency-porting-from-a-queue-to-multiprocessing/
  • https://groups.google.com/forum/#!topic/wxpython用户/51xEiNTn288
 类似资料:
  • 问题内容: 据我所知,我可以使用Golang运行简单的Web服务器,只需使用软件包即可,例如 其中PORT是要侦听的TCP地址。 我可以将PORT用作PORT S ,例如从一个应用程序中使用吗? 我的问题可能很愚蠢,但是“谁不问,他就不会回答!” 感谢前进! 问题答案: 你不能。 但是,您可以在不同的端口上启动多个侦听器

  • 在我的Java应用程序中,我想运行一个批处理文件,该批处理文件调用“” 似乎我甚至不能让我的批处理文件执行。我没主意了。 这是我用Java写的: 以前,我有一个我想运行的Python Sconscript文件,但由于它不起作用,我决定通过批处理文件调用脚本,但该方法尚未成功。

  • 我们正在构建一个基于Kinesis/DynamoDB流的服务,我们有一个问题(我们在官方文档中找不到),那就是我们是否可以使用相同的租赁表(DynamoDB)来存储使用相同流的不同KCL应用程序的检查点信息。 是好的练习吗? 它会在行为上产生某种不一致吗? 您是否建议每个KCL应用程序使用单独的租赁表? 非常感谢你。

  • 我怎么能做到..以编程方式有什么方法可以做到这一点。 Pls救命!

  • 问题内容: 我最近继承了一个小型Java程序,该程序从大型数据库中获取信息,进行一些处理并生成有关该信息的详细图像。原始作者使用单个线程编写了代码,然后对其进行了修改,以使其可以使用多个线程。 他在代码中定义了一个常量; 然后,它设置用于创建映像的线程数。 我理解他的理由,即线程数不能大于可用处理器的数目,因此将其设置为可以充分发挥处理器潜力的数量。这样对吗?还是有更好的方法来充分利用处理器的潜力

  • 我在dockerized应用程序和Memcached上遇到了一个问题,要存储一些值,显然,当a启动一个运行Spymemcached客户端的新Docker实例时,所有存储在缓存中的数据都是无效的,所以如果我之前在节点1的缓存中存储了一些值,然后启动节点2,这些值将从Memcached服务器中清除,最后如果a在节点1上再次存储相同的值,并在节点2上查询,它们将共享到两个节点之外,而不清除数据。是预期的