【问题标题】:Asynchronously retrieving information from a process从进程中异步检索信息
【发布时间】:2012-02-26 13:32:39
【问题描述】:

这是我想做的伪代码。

import time

def run():

    while x < 10000000:
        x += 1

if __name__ == "__main__":

    p = Process(run)
    p.start()

    time.sleep(3)

    #some code that I don't know that will give me the current value of x

Pythons threading 模块似乎是要走的路,但是我还没有成功实现这个例子。

【问题讨论】:

    标签: python asynchronous multiprocessing python-2.7


    【解决方案1】:

    您需要的一切都在multiprocessing module 中。也许shared memory 对象会在这里有所帮助?

    请注意,Python 中的线程受Global Interpreter Lock 的影响,这实质上阻止了多线程 Python 代码。

    【讨论】:

    • 你能提供一个例子吗?是否可以在没有共享内存的情况下做到这一点?另外我的意思是多处理模块,只是将它隔开并写线程而不是=P。
    • 我也是第一次这样做。您是否尝试过文档中的示例? -- 如果没有共享内存,您需要以某种方式主动传达x 的值。
    【解决方案2】:

    就是这样

    from multiprocessing import Process, Pipe
    import time
    
    def f(conn):
        x = 0
        while x < 10000000:
            if conn.poll():
                if conn.recv() == "get":
                    conn.send(x)
    
            x += 1
    
        conn.close()
    
    if __name__ == '__main__':
    
        parent_conn, child_conn = Pipe()
        p = Process(target=f, args=(child_conn,))
        p.start()
    
        time.sleep(2)
        parent_conn.send("get")
        print(parent_conn.recv())
    
        p.join()
    

    原来是duplicate,我的版本更通用。

    【讨论】:

      【解决方案3】:

      这实际上取决于您要完成的工作以及子进程的创建频率和内存使用情况。一些长期存在的进程,您可以轻松摆脱多个操作系统级进程(请参阅subprocess 模块)。如果你要生成很多小线程,线程会更快并且内存开销更少。但是在使用线程时,您会遇到诸如“线程安全”、全局解释器锁以及信号量和死锁等令人讨厌的、无聊的东西之类的问题。

      两个进程或线程之间的数据共享策略大致可以分为两类:“让我们共享一块内存”(使用Locks 和Mutexes)和“让我们共享数据副本”(使用消息传递、管道或sockets)。共享方法对内存很轻,但很难管理,因为这意味着确保一个线程不会读取共享内存的同一部分,因为另一个线程正在写入共享内存,这不是微不足道的,也很难调试。复制方法在内存上比较重,但更容易理解。此外,它还具有明显的优势,即能够非常简单地移植到网络,从而实现分布式计算。

      您还必须考虑底层操作系统。我不知道具体情况,但有些方法在不同的方法上比其他方法更好。

      我会说从 RabbitMQ 之类的东西开始。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-18
        • 1970-01-01
        • 2016-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多