【问题标题】:Multiprocessing two functions while sharing data在共享数据的同时多处理两个函数
【发布时间】:2018-12-10 04:01:12
【问题描述】:

我刚开始使用 Python,所以请多多包涵。

我的代码现在看起来像这样(简化)

lst = []

def func1():
    while True:
        **doing some stuff with selenium, performing some operations on lst**

        **I never break the loop**

def func2():
    while True:
        **doing some stuff with selenium, performing some operations on lst**
        **I never break the loop**

到目前为止一切顺利。但是,我需要两个函数同时运行,同时对同一个列表进行处理并交换它们。例如,func1 可能会在 lst 中附加一些内容,而 func2 可能会从 lst 中删除一些内容,然后 func1 可能会删除一些内容等。这两个函数都需要无限期地运行,因此无限循环不会让它变得更容易。

我阅读了一些关于多线程的信息,但据我了解,多线程并不能真正并行运行,因此我的代码执行速度会变慢。这根本不是一个选择。我还读到多线程和 Selenium 并不是天作之合。

那么,我该如何实现呢?我需要这两个函数才能在无限期同时运行时对我的列表执行操作。

我还可以在多处理方面使用一些帮助。映射、池、队列……我什至不知道从哪里开始。

我真的需要你们的帮助,我将不胜感激。

附加信息(我真的不知道这是否重要):所有这些都是在使用 Python 2.7 和 Selenium 和 Chromedriver 的 Windows 机器上运行的。

【问题讨论】:

    标签: python multithreading python-2.7 multiprocessing python-multiprocessing


    【解决方案1】:

    使用shared list proxylock 在进程之间同步lst

    伪代码:

    import multiprocessing as mp
    
    def func1(lst, lock):
        while True:
            lock.acquire()
            # **doing some stuff with selenium, performing some operations on lst**
            lock.release()
    
            # **I never break the loop**
    
    def func2(lst, lock):
        while True:
            lock.acquire()
            # **doing some stuff with selenium, performing some operations on lst**
            lock.release()
            # **I never break the loop**
    
    lst = mp.Manager().list()
    lock = mp.Lock()
    p1 = mp.Process(target=func1, args=(lst,lock))
    p2 = mp.Process(target=func2, args=(lst,lock))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    

    注意lst中的item默认应该是一个标量,Python使用shadow copy来实现进程间的同步。

    如果lst 包含其他类型的元素,例如列表或字典或对象,则必须将其重新分配给lst 每次操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      • 2021-03-19
      • 2022-11-12
      相关资源
      最近更新 更多