Python线程,连接为connect-in循环

2024-04-19 20:56:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法在与服务器的1个连接上启动2个独立线程。 我想在循环中运行2个函数,看起来它们是一个接一个地执行的。 是否有其他选项可以每x秒/分钟运行一次函数?你知道吗

穿线是好工具吗?你知道吗

import time
import datetime
from threading import Thread

def func1(ts3conn):
    print(f"func 1, pause 2sec NOW:{datetime.datetime.now()}")
    time.sleep(2)

def func2(ts3conn):
    print(f"func2, pause 10sec NOW:{datetime.datetime.now()}")
    time.sleep(10)

if __name__ == "__main__":

    with ts3.query.TS3ServerConnection("telnet://serveradmin:passwod@1.2.3.4:10011") as ts3conn:
        ts3conn.exec_("use", sid=1)
        ts3conn.exec_("clientupdate", client_nickname="BOT")
        while True:
            Thread(target=func1(ts3conn)).start()
            Thread(target=func2(ts3conn)).start()

func 1, pause 2sec NOW:2019-08-24 23:53:19.139951
func2, pause 10sec NOW:2019-08-24 23:53:21.141273
func 1, pause 2sec NOW:2019-08-24 23:53:31.141770
func2, pause 10sec NOW:2019-08-24 23:53:33.142568
func 1, pause 2sec NOW:2019-08-24 23:53:43.143090
func2, pause 10sec NOW:2019-08-24 23:53:45.143880

Tags: importdatetimetimedefsleepthreadnowexec
1条回答
网友
1楼 · 发布于 2024-04-19 20:56:26

target参数需要一个可调用的(即函数),但您正在传递调用该可调用函数的结果,而sleep甚至在创建线程之前就发生了。你知道吗

所以不是这样:

Thread(target=func1(ts3conn)).start()

。。。尝试以下操作:

Thread(target=func1, args=(ts3conn,)).start()

不幸的是,当您修复此问题时,您将遇到另一个问题:while循环不会在创建新线程之前等待线程完成,而是将继续创建新线程,直到应用程序崩溃。您可以尝试以下操作:

while True:
    t1 = Thread(target=func1, args=(ts3conn,))
    t2 = Thread(target=func2, args=(ts3conn,))
    t1.start()
    t2.start()

    # wait for the threads to finish
    t1.join()
    t2.join()

相关问题 更多 >