私信  •  关注

Masklinn

Masklinn 最近创建的主题
Masklinn 最近回复了
3 年前
回复了 Masklinn 创建的主题 » 子进程不会在并行多处理Python中运行
pool = Pool(cpu_count())

无用,这是默认行为

pool.apply_async(run, args=())
sleep(0.2)

这符合 任务,因为你在之后睡觉,除非任务需要超过200毫秒(这是不可能的,200毫秒是不可能的) 很多 )所有提交文件将按顺序进行

processes.append(Process(target=run, args=()))
processes[-1].start()
sleep(0.2)

同上,但可能更糟(目前尚不清楚 start() 是的)。

pool.apply(run, args=())
sleep(0.2)

apply 正在阻塞,因此这将向队列提交一个作业 等到工作完成 .

只有第一个版本才有机会利用这个池,因为提交后你要睡200毫秒,所以作业需要至少200毫秒才能并行。

你一点也不想解释什么 run 是的,你唯一要说的是他们正在读取文件,但即使是入门级SSD也有GB/s级带宽,所以你至少需要读取数百MBs的文件才能感觉到这种效果(如果你使用非常低效的读取方法,可能会更少)。

使用进程池的正确方法是 apply_async 在一个紧密的循环中,或者使用 map_async imap_unordered 将批量作业发送到池中,并让池在工人之间分配工作。

而且

不同的进程各自读取不同的文件

当然没有任何迹象或证据表明这一点,因为它们运行的都是相同的 没有参数的函数。

5 年前
回复了 Masklinn 创建的主题 » Python-函数的可选参数

其他人已经给出了你可以做到的方法,但在更基本的层面上,我会问为什么这甚至是相同的方法?在我看来,这里有两种不同的方法,fúsum和f(或其他),一个取两个参数,另一个取4。

或者如果这是一个更复杂的操作,而c和d只是附加的参数/属性,则可以将它们默认为空值,例如,对于加法,只需将它们默认为0:

def f(a, b, c=0, d=0)

a+b-0+0 如果不提供这些参数,则不会执行任何操作,结果将与a+b相同,甚至不需要条件或魔法标志。 很抱歉错过了第二个案子 - 把它误读为+

6 年前
回复了 Masklinn 创建的主题 » python中的replace函数给出了错误的结果

{
    'KOPL':'KOLPOL',
    'RWP':'KOLPOL',
    'MMP':'KOLPOL',
}

df['Final']