Tag: 多处理

日志输出的多进程。进程

在python中使用multiprocessing.Process类时,是否有办法logging给定Process的stdout输出?

使用多处理模块进行集群计算

我有兴趣使用计算机群集来运行Python程序。 我过去一直在使用Python MPI接口,但是由于编译/安装这些接口有困难,我宁愿使用内置模块(如Python的多处理模块)的解决scheme。 我真正想要做的只是build立一个multiprocessing.Pool实例,跨越整个计算机集群,并运行一个Pool.map(…) 。 这是可能的/容易做的事吗? 如果这是不可能的,我希望至less能够从每个节点的不同参数的中央脚本启动任何节点上的Process实例。

我可以在由Pool.imap调用的函数中使用多处理队列吗?

我正在使用Python 2.7,并尝试在自己的进程中运行一些CPU繁重的任务。 我希望能够发送消息回到父进程,以通知进程的当前状态。 多处理队列似乎是完美的,但我不知道如何得到它的工作。 所以,这是我的基本工作示例,减去使用队列。 import multiprocessing as mp import time def f(x): return x*x def main(): pool = mp.Pool() results = pool.imap_unordered(f, range(1, 6)) time.sleep(1) print str(results.next()) pool.close() pool.join() if __name__ == '__main__': main() 我试过用几种方式传递队列,并且他们得到错误消息“RuntimeError:队列对象应该只通过inheritance在进程间共享”。 这是我根据我发现的早期答案尝试的方法之一。 (我遇到同样的问题,试图使用Pool.map_async和Pool.imap) import multiprocessing as mp import time def f(args): x = args[0] q = args[1] q.put(str(x)) time.sleep(0.1) return […]

在Linux / UNIX上的多处理情况下可以使用互斥体吗?

这是一个面试问题。 在Linux / UNIX的多处理情况下可以使用互斥体吗? 我的想法:不,不同的进程有不同的内存空间。 互斥体仅用于multithreading。 信号量用于多处理进行同步。 对 ? 任何意见,欢迎。 谢谢

如何使用entity frameworklocking读取的表格?

我有一个SQL Server(2012),我使用entity framework(4.1)访问。 在数据库中,我有一个名为URL的表格,一个独立的进程提供新的URL。 URL表中的条目可以处于“新build”,“正在处理”或“已处理”状态。 我需要从不同的计算机访问URL表格,检查状态为“New”的URL条目,取第一个,并将其标记为“In Process”。 var newUrl = dbEntity.URLs.FirstOrDefault(url => url.StatusID == (int) URLStatus.New); if(newUrl != null) { newUrl.StatusID = (int) URLStatus.InProcess; dbEntity.SaveChanges(); } //Process the URL 由于查询和更新不是primefaces的,我可以让两台不同的计算机读取和更新数据库中相同的URL条目。 有没有办法让select然后更新序列primefaces,以避免这种冲突?

如何在Python多处理中将Pool.map和Array(共享内存)结合起来?

我有一个非常大的(只读)数据数组,我想要由多个进程并行处理。 我喜欢Pool.map函数,并希望使用它来并行计算该数据上的函数。 我看到可以使用Value或Array类在进程之间使用共享内存数据。 但是当我尝试使用这个时,我得到了一个RuntimeError:'SynchronizedString对象应该只在使用Pool.map函数时通过inheritance在进程之间共享: 这是我正在尝试做的一个简单的例子: from sys import stdin from multiprocessing import Pool, Array def count_it( arr, key ): count = 0 for c in arr: if c == key: count += 1 return count if __name__ == '__main__': testData = "abcabcs bsdfsdf gdfg dffdgdfg sdfsdfsd sdfdsfsdf" # want to share it using shared memory […]

在python中处理多个进程中的单个文件

我有一个单一的大文本文件,我想处理每一行(做一些操作)并将它们存储在数据库中。 由于一个简单的程序花费的时间太长,我希望通过多个进程或线程完成。 每个线程/进程应该读取来自单个文件的不同的数据(不同的行),并对他们的数据(行)进行一些操作,并把它们放到数据库中,这样最后我处理了整个数据,数据库被转储我需要的数据。 但我无法弄清楚如何解决这个问题。

使用Python多处理解决不平行的问题

如何使用多处理来解决尴尬的并行问题 ? 不解之缘的并行问题通常由三个基本部分组成: 读取input数据(从文件,数据库,TCP连接等)。 对input数据运行计算,每个计算独立于任何其他计算 。 写入计算结果(到文件,数据库,tcp连接等)。 我们可以在两个维度上并行化程序: 第2部分可以在多个核上运行,因为每个计算都是独立的; 处理顺序无关紧要。 每个部分都可以独立运行。 第1部分可以将数据放在input队列中,第2部分可以将数据从input队列中取出,并将结果放到输出队列中,第3部分可以将结果从输出队列中取出并写出。 这似乎是并发编程的一个最基本的模式,但是我仍然试图解决它,所以让我们编写一个规范的例子来说明如何使用多处理来完成 。 以下是示例问题:给定一个包含整数行作为input的CSV文件 ,计算它们的总和。 将问题分成三部分,可以并行运行: 将input文件处理成原始数据(列表/整数的迭代) 并行计算数据的总和 输出总和 下面是传统的,单进程绑定的Python程序,它解决了这三个任务: #!/usr/bin/env python # -*- coding: UTF-8 -*- # basicsums.py """A program that reads integer values from a CSV file and writes out their sums to another CSV file. """ import csv import optparse import […]

Python:线程和多处理模块之间有什么区别?

我正在学习如何在Python中使用threading和multiprocessing模块来并行运行某些操作,并加速我的代码。 我发现这很难(也许是因为我没有任何理论背景)来理解threading.Thread()对象和multiprocessing.Process()之间的区别。 此外,我不完全清楚如何实例化一个作业队列,并且只有4个(例如)它们并行运行,而另一个则等待资源释放,然后再执行。 我在文档中find清楚的例子,但不是很详尽; 只要我尝试使事情变得复杂一些,就会收到很多奇怪的错误(比如不能被腌制的方法等等)。 那么,我应该什么时候使用threading和multiprocessing模块呢? 你能把我和一些资源联系起来解释这两个模块背后的概念,以及如何正确使用它们来完成复杂的任务吗?

多处理中的共享内存

我有三个大名单。 首先包含bitarrays(模块bitarray 0.8.0),另外两个包含整数数组。 l1=[bitarray 1, bitarray 2, … ,bitarray n] l2=[array 1, array 2, … , array n] l3=[array 1, array 2, … , array n] 这些数据结构需要相当多的RAM(总共约16GB)。 如果我开始使用12个subprocess: multiprocessing.Process(target=someFunction, args=(l1,l2,l3)) 这是否意味着将为每个子stream程复制l1,l2和l3,或者这些子stream程是否会共享这些列表? 或者更直接的,我会使用16GB或192GB的RAM吗? someFunction将从这些列表中读取一些值,然后根据读取的值执行一些计算。 结果将返回到父进程。 列表l1,l2和l3不会被某些函数修改。 因此,我会假设子stream程不需要也不会复制这些庞大的列表,而只是将它们与父级分享。 也就是说,由于linux下的copy-on-write方法,程序会占用16GB的内存(无论启动多less个subprocess)? 我是正确的,还是我错过了会导致列表被复制的东西? 编辑 :我仍然困惑,在阅读了更多的主题后。 一方面,Linux使用copy-on-write,这意味着没有数据被复制。 另一方面,访问对象将改变它的ref-count(我仍然不确定为什么,这是什么意思)。 即使如此,整个对象是否会被复制? 例如,如果我定义一些function,如下所示: def someFunction(list1, list2, list3): i=random.randint(0,99999) print list1[i], list2[i], list3[i] 使用这个函数是否意味着l1,l2和l3将被完全复制到每个subprocess? 有没有办法检查这个? […]