萍滴滴 2024-03-29 16:01 采纳率: 50%
浏览 2

关于#python#的问题:进行TCP通讯

有11条执行指令:1 2 3 4 5 6 7 8 9 10 11

3和4必须同时进行, 3和4完成后,才可执行5,
6 执行慢。在6执行过程中,可进行 7 8 9 10的操作,11需等前面都完成才可以进行

目前思路:
lit1:[1 2 [3 4]]
lit2:[5 [6 7] 8 9 10 11]
lit1 True # True 若识别到内部列表,则 同时进行,接收两个结果才进行下一步
lit2 False # False 若识别到内部列表,则 同时进行,接收到 7 的结果就进行下一步(因为7 8 9 10 有四个步骤,比6执行肯定要慢。所以没有去判断6有没有执行完)

需要加一条执行指令12,加在3 和6后面。并且,等3 或者6执行完才能进行12,
如:1 2 3 12 4 5
下发指令1,下发指令2,下发指令3和4,等3执行完成后下发指令12,等12和4完成后,下发指令5

python怎么样实现

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-29 16:02
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这个问题可以使用 Python 的多线程来实现。其中使用两个线程 lit1 和 lit2 来分别执行任务列表 1 和 2。 关于步骤 3 和 4 的同时进行,可以使用 threading 库中的 Event 对象来同步两个线程,如下所示:
    from threading import Thread, Event
    def task1(event):
        # 执行任务 1 和 2
        ...
        # 同时执行任务 3 和 4
        event.set()  # 发送信号,告诉线程 lit2 可以执行任务 5 了
    def task2(event):
        # 等待任务 3 和 4 同时完成
        event.wait()
        # 执行任务 5
        ...
    # 创建 Event 对象
    event = Event()
    # 创建线程
    t1 = Thread(target=task1, args=(event,))
    t2 = Thread(target=task2, args=(event,))
    # 启动线程
    t1.start()
    t2.start()
    

    关于步骤 6 和 7~10 的并行执行,可以使用 threading 库中的 Lock 对象来实现。只需要在任务 6 中获取锁,然后在任务 7~10 中尝试获取锁,如果获取不到就等待,直到任务 6 释放锁为止。如下所示:

    from threading import Thread, Lock
    def task1(lock):
        # 执行任务 1 和 2
        ...
        # 执行任务 3 和 4
        ...
        # 执行任务 6,并获取锁
        lock.acquire()
        # 执行任务 7~10,并尝试获取锁
        ...
        # 释放锁
        lock.release()
        # 执行任务 11
        ...
    # 创建 Lock 对象
    lock = Lock()
    # 创建线程
    t1 = Thread(target=task1, args=(lock,))
    # 启动线程
    t1.start()
    

    最后,添加步骤 12 可以通过在任务 3 和 6 后面插入一个 Event 对象来实现。当任务 3 或任务 6 执行完毕时,都会发送信号告诉线程 lit2 可以执行任务 12 了,如下所示:

    from threading import Thread, Event
    def task1(event1, event2):
        # 执行任务 1 和 2
        ...
        # 同时执行任务 3 和 4
        ...
        # 执行任务 6,并获取锁
        ...
        # 发送信号,告诉线程 lit2 可以执行任务 12 了
        event1.set()
        # 释放锁
        ...
        # 发送信号,告诉线程 lit2 可以执行任务 12 了
        event2.set()
        # 执行任务 11
        ...
    def task2(event1, event2):
        # 等待任务 3 或 6 完成
        event1.wait()
        # 执行任务 12
        ...
        # 等待任务 4 和 12 完成
        event2.wait()
        # 执行任务 5
        ...
    # 创建 Event 对象
    event1 = Event()
    event2 = Event()
    # 创建线程
    t1 = Thread(target=task1, args=(event1, event2))
    t2 = Thread(target=task2, args=(event1, event2))
    # 启动线程
    t1.start()
    t2.start()
    
    评论

报告相同问题?

问题事件

  • 创建了问题 3月29日

悬赏问题

  • ¥15 pragma pack没起作用
  • ¥20 如何实现关闭某一个应用程序后,自动运行一个批处理文件。
  • ¥15 关于 S7-PLCSIM Advanced 5.0本地TCP连接无法读写数据
  • ¥15 关于温度改变石墨烯介电性能(关键词-介电常数)
  • ¥150 HDMI分路器LT86102 的输出在890MHz频点处EMC超标8DB
  • ¥15 druid(相关搜索:数据库|防火墙)
  • ¥15 大一python作业
  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥60 如何鉴定微信小程序数据被篡改过
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀