相关疑难解决方法(0)

线程池类似于多处理池?

工作线程是否有Pool类,类似于多处理模块的Pool类

我喜欢例如并行化地图功能的简单方法

def long_running_func(p):
    c_func_no_gil(p)

p = multiprocessing.Pool(4)
xs = p.map(long_running_func, range(100))
Run Code Online (Sandbox Code Playgroud)

但是我想在没有创建新流程的开销的情况下这样做.

我知道GIL.但是,在我的用例中,该函数将是一个IO绑定的C函数,python包装器将在实际函数调用之前释放GIL.

我是否必须编写自己的线程池?

python multithreading missing-features

326
推荐指数
8
解决办法
27万
查看次数

限制一次运行的最大线程数的正确方法?

我想创建一个运行多个轻量级线程的程序,但是将其自身限制为一个恒定的,预定义数量的并发运行任务,就像这样(但没有竞争条件的风险):

import threading

def f(arg):
    global running
    running += 1
    print("Spawned a thread. running=%s, arg=%s" % (running, arg))
    for i in range(100000):
        pass
    running -= 1
    print("Done")

running = 0
while True:
    if running < 8:
        arg = get_task()
        threading.Thread(target=f, args=[arg]).start()
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最安全/最快的方法是什么?

python multithreading python-multithreading

38
推荐指数
7
解决办法
6万
查看次数

Python是否具有与Java的CountDownLatch类似的控制机制?

所以,我首先要说这是一个家庭作业问题.我的教授给了我们一个作业,必须用Java编写一次,用另一种语言写一次; 我选择第二语言是Python,因为我至少对它有点熟悉.该计划必须以下列方式运作:

启动我们称之为parent的main方法/线程.

从父级启动线程子1

从线程子1开始线程孙子

从父级启动线程子2

从孙子线程中打印孙子

从孩子2线程打印孩子2

从孩子1个线程打印孩子1

从main方法/父线程中打印父级

这些事情必须按此顺序完成.我编写了使用CountDownLatch在Java中执行此操作的代码,以便组织这些事情发生的方式.但是,我没有在Python中看到类似的机制(虽然我对Python不熟悉而不是Java).有没有类似的机制可能我找不到,因为我不知道它叫什么?

python multithreading

14
推荐指数
2
解决办法
2463
查看次数