相关疑难解决方法(0)

python多处理中的共享变量

第一个问题是Value和Manager()之间有什么区别.值?

第二,是否可以在不使用Value的情况下共享整数变量?以下是我的示例代码.我想要的是获取一个值为整数的字典,而不是值.我所做的只是在整个过程之后改变它.有没有更简单的方法?

from multiprocessing import Process, Manager

def f(n):
    n.value += 1

if __name__ == '__main__':
    d = {}
    p = []

    for i in range(5):
        d[i] = Manager().Value('i',0)
        p.append(Process(target=f, args=(d[i],)))
        p[i].start()

    for q in p:
        q.join()

    for i in d:
        d[i] = d[i].value

    print d
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

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

共享列表的多处理

我写了一个这样的程序:

from multiprocessing import Process, Manager

def worker(i):
    x[i].append(i)

if __name__ == '__main__':
    manager = Manager()
    x = manager.list()
    for i in range(5):
        x.append([])
    p = []
    for i in range(5):
        p.append(Process(target=worker, args=(i,)))
        p[i].start()

    for i in range(5):
        p[i].join()

    print x
Run Code Online (Sandbox Code Playgroud)

我想在进程之间创建一个列表的共享列表,每个进程都会修改其中的列表.但是这个程序的结果是一个空列表列表:[[],[],[],[],[]].

出了什么问题?

python multiprocessing

12
推荐指数
1
解决办法
1万
查看次数

python多处理/线程清理

我有一个python工具,基本上具有这种设置:

main process (P1) -> spawns a process (P2) that starts a tcp connection
                  -> spawns a thread (T1) that starts a loop to receive 
                     messages that are sent from P2 to P1 via a Queue (Q1)

server process (P2) -> spawns two threads (T2 and T3) that start loops to
                       receive messages that are sent from P1 to P2 via Queues (Q2 and Q3)
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我停止程序(使用Ctrl + C)时,它不会退出。服务器进程已结束,但主要进程仅挂在那里,我必须将其杀死。

线程循环函数看起来都一样:

def _loop(self):
    while self.running:
        res = self.Q1.get()
        if res is None: …
Run Code Online (Sandbox Code Playgroud)

python multithreading multiprocessing

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

标签 统计

multiprocessing ×3

python ×3

multithreading ×1