【问题标题】:Collecting variables from multiple python scripts in one parent script在一个父脚本中从多个 python 脚本中收集变量
【发布时间】:2017-08-18 18:45:36
【问题描述】:

我尝试编写一个 python-parent-script,从 4 个子脚本中收集数据。我得到了什么:

  • 每个子脚本都从不同的传感器读取数据,并且必须连续读取它们。所以我现在要做的就是在 while True 循环中读取它们。

  • 不同的传感器具有不同的响应时间,因此一个子脚本以每秒一次的速度读取,而另一个子脚本的读取速度会快 100 倍。

我的目标/我的奋斗:

  • 在一个脚本中收集所有孩子生成的数据,包含 4 个不同的变量

我所取得的成就:

  • 子脚本在那里工作正常,读取数据没有问题

  • 我可以从终端启动所有 4 个子脚本作为子进程,但不知道如何收集生成的数据

  • 在脚本之间传递数据,但从不同时从两个脚本传递数据,而且速度很慢,因为“从脚本导入变量”与传感器的读取一样快。

后来计划通过蓝牙将这 4 个变量发送到我的手机,而我只用一个传感器就成功了。

由于我对整个 Raspberry/Python 社区还很陌生,我首先要对不具体的解释表示抱歉。请随时询问更多信息或建议以不同的方式解决问题。其次,如果你愿意的话,如果你能在 code-sn-ps 方面帮助我,我会非常感激,因为我还是个新手,这对我的帮助比链接到图书馆或文献的方式要多,这些链接会产生比回答更多的问题。

非常感谢您

【问题讨论】:

    标签: python multithreading bluetooth multiprocessing collect


    【解决方案1】:

    最简单的方法是使用线程,可通过threading class 获得。收集数据就像写入共享变量一样简单(当然是线程安全的)。

    import threading
    import time
    
    data1 = []
    lock1 = threading.Lock() # Use a lock, mutex, or semaphore to ensure thread safety
    
    def foo():
        while True:
            lock1.acquire()
            data1.append(bar)
            lock1.release()
            time.sleep(10)
    
     foo_thread = threading.thread(target=foo)
     foo_thread.start()
    
     while True:
         lock1.acquire()
         # If all values don't need to be held in memory the parent
         # script can implement some kind of queue and delete values 
         # after processing
         do_stuff_with(data)
         lock1.release()
         # Queuing also allows the parent script to run at a much slower rate
         time.sleep(100)
    

    上面的例子是一个非常快速的线程演示。有更好的数据类型来实现排队,例如collection.deque

    python 中的线程确实有一些注意事项,即 python 在一个进程中运行脚本并且有一个全局解释器锁,这意味着线程模块提供并发性,但不提供并行性。对于仅 4 个数据集合,它可能会导致任何问题,但如果需要更好的性能,multiprocessing 提供了用于生成多个 python 进程的工具,以实现真正的并行性。

    【讨论】:

    • 非常感谢您提供详细的回答和您的努力,我会尝试一下,如果有效,我会回复您。
    猜你喜欢
    • 2016-06-01
    • 2017-11-07
    • 1970-01-01
    • 2019-03-03
    • 2023-02-04
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    相关资源
    最近更新 更多