相关疑难解决方法(0)

从一个线程中分叉是否安全?

让我解释一下:我已经在Linux上开发了一个应用程序,它分叉并执行外部二进制文件并等待它完成.结果由fork +进程独有的shm文件传递.整个代码封装在一个类中.

现在我正在考虑线程化这个过程以加快速度.拥有许多不同的类函数实例,并行地(使用不同的参数)分叉和执行二进制文件,并使用自己独特的shm文件传递结果.

这个线程安全吗?如果我在一个线程中分叉,除了安全之外,还有什么我需要注意的吗?任何建议或帮助非常感谢!

c++ linux multithreading fork process

41
推荐指数
6
解决办法
2万
查看次数

python debug tools for multiprocessing

I have a python script that works with threads, processes, and connections to a database. When I run my script, python crashes.

I cannot explicitly detect the case in which this happens.

Now I am looking for tools to get more information when python crashes, or a viewer to see all my created processes/connections.

python debugging

7
推荐指数
3
解决办法
2889
查看次数

python进程池在每个进程上超时而不是所有池

我需要运行许多进程,但不能全部运行,例如同时运行 4 个进程。multiprocessing.Pool正是我需要的。但问题是,如果进程持续时间超过超时(例如 3 秒),我需要终止进程。Pool只支持等待所有进程的超时,而不是每个进程。这就是我需要的:

def f():
    process_but_kill_if_it_takes_more_than_3_sec()
pool.map(f, inputs)
Run Code Online (Sandbox Code Playgroud)

我找不到使用Pool超时的简单方法。有一个解决方案,从礼Bendersky。这是一个通过Thread.join(timeout). 它有效,(尽管它的停止方法效果不佳)。但是这个方法运行一个新的不必要的线程,而进程的主线程只是在等待,因为我们需要一个超时控制器。应该可以从一个点控制所有超时,如下所示:

import time
from multiprocessing import Process


def f(n):
    time.sleep(n)

timeout = 3
tasks = [1, 2, 4, 1, 8, 2]

procs = []
pool_len = 4
while len(tasks) > 0 or len(procs) > 0:
    if len(tasks) > 0 and len(procs) < pool_len:
        n = tasks.pop(0)
        p = Process(target=f, args=(n,))
        p.start()
        procs.append({'n': n, 'p': p, 't': time.time() + timeout}) …
Run Code Online (Sandbox Code Playgroud)

python timeout pool multiprocessing

6
推荐指数
1
解决办法
3841
查看次数

是否有任何理由不在Python中混合使用Multiprocessing和Threading模块

我正在考虑使用Python来实现一个需要大量多线程的程序.另一个要求是它将在桌面上运行,因此有许多进程会使应用程序显得凌乱而且难以杀死(在任务管理器中).因此,我正在考虑使用线程和多处理模块来减少进程数.据我所知,GIL仅适用于单个流程.我的问题是:有没有理由不混合使用这两个模块?

python windows multithreading python-3.x

5
推荐指数
1
解决办法
1715
查看次数

在 Django Web 应用程序中运行异步 Python 代码

在 Django Web 应用程序中异步运行某些代码段是否可以。如果是这样怎么办?

例如:

我有一个可以返回成百上千个结果的搜索算法。我想在数据库中输入这些项目是搜索的结果,所以我可以看到用户搜索最多的内容。我不希望客户端必须等待额外的成百上千个数据库插入。有没有办法异步执行此操作?这样做有什么危险吗?有没有更好的方法来实现这一目标?

python django asynchronous

5
推荐指数
1
解决办法
3855
查看次数