当前位置: 首页 > 面试题库 >

使用多处理从不同流程附加到同一列表

方安怡
2023-03-14
问题内容

我需要L使用multiprocessing将对象添加到来自不同进程的一个列表中,但是它返回空列表。如何L使用多重处理让许多进程追加到列表中?

#!/usr/bin/python
from multiprocessing import Process

L=[]
def dothing(i,j):
    L.append("anything")
    print i

if __name__ == "__main__":
    processes=[]
    for i in range(5):
        p=Process(target=dothing,args=(i,None))
        p.start()
        processes.append(p)
    for p in processes:
        p.join()

print L

问题答案:

全局变量不在进程之间共享。

您需要使用multiprocessing.Manager.list

from multiprocessing import Process, Manager

def dothing(L, i):  # the managed list `L` passed explicitly.
    L.append("anything")

if __name__ == "__main__":
    with Manager() as manager:
        L = manager.list()  # <-- can be shared between processes.
        processes = []
        for i in range(5):
            p = Process(target=dothing, args=(L,i))  # Passing the list
            p.start()
            processes.append(p)
        for p in processes:
            p.join()
        print L

请参阅在进程之间共享状态。( 服务器进程 部分)。



 类似资料:
  • 我们的要求是同时写多个文件。我们正在使用spring批处理来编写文件,并且我们正在从不同的线程中启动spring批处理。每个线程都有自己的应用程序上下文。因此我们可以确保单例bean不会跨多个线程共享。下面是我的代码片段。 这就是我们调用spring批处理的方式。 ThreadPoolExecutor TPE=new ThreadPoolExecutor(10,10,1000000,TimeUni

  • 我有两个流A和B。 我开始同时吃A和B。 流A仅在每分钟的第59秒获得记录。 流B在每分钟的任何一秒都有记录。 我希望处理使两个流同步。 示例:在10:01:59之后从流A中,我将在10:02:59收到一条记录,直到10:02:59,我也不想从流B中读取任何内容。 这可以在Flink中实现吗?

  • 问题内容: 我正在编写一个将多个线程的行附加到同一文件的应用程序。 我有一个问题,其中某些行被追加而没有新行。 有什么解决办法吗? 问题答案: 解决方案是仅在一个线程中写入文件。

  • 问题内容: 我正在跟踪一些并发问题,在登录到控制台时,使每个线程的输出行具有不同的颜色将非常有帮助。我在OS X上。是否可以使用转换模式输出一些控制代码来完成此操作,或者需要自定义附加程序?有人知道吗? exec-9和exec-10的行应使用不同的颜色。 问题答案: 您可以扩展和覆盖。您可以在那里查看基于线程名称的颜色(奇/偶,也许?)。 为了将颜色输出到控制台,您需要使用ANSI Escape

  • 我有点小问题,找不到解决办法。我想为级别信息而不是级别警告设置图案布局。如果我有一个级别信息的日志,一切都正常,但是如果日志是级别,它会被写入控制台两次(作为级别信息和作为级别警告)。只需将特定级别的所有日志写入该级别和以下级别的us日志即可。 我想将级别信息写入控制台,如:和级别如。

  • 我有一个Kinesis生产者,它将单一类型的消息写入流。我想在多个完全不同的消费者应用程序中处理这个流。因此,给定主题/流的具有单个发布者的发布/订阅。我还想利用检查点来确保每个消费者处理写入流的每条消息。 最初,我对所有消费者和生产者使用相同的应用程序名称。但是,一旦我启动多个消费者,我就开始收到以下错误: 通用域名格式。amazonaws。服务。运动。模型InvalidArgumentExce