我正在尝试通过python捕获项目符号屏幕。其过程是在将登录名和其他一些消息发送到项目符号屏幕服务器后,我将得到响应。
当我计划获取两个房间的项目符号屏幕时,我只能得到第一个请求的响应。
代码如下:
# coding=utf-8
import multiprocessing
import socket
import time
import re
import signal
import threading
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostbyname("openbarrage.douyutv.com")
port = 8601
client.connect((host, port))
def send_req_msg(msg):
"""
wrap msg
"""
pass
def set_msg(roomid):
msg = 'type@=loginreq/roomid@={}/\0'.format(roomid)
send_req_msg(msg)
msg_more = 'type@=joingroup/rid@={}/gid@=-9999/\0'.format(roomid)
send_req_msg(msg_more)
if __name__ == '__main__':
pool = []
roomid = [123, 666]
for i in range(0, len(roomid)):
t = threading.Thread(target=set_msg(roomid[i]))
t.start()
pool.append(t)
for a in pool:
a.join()
多处理和线程均无法成功。当我使用wireshard分析tcp时。只有第一个请求,它是响应。而且我只能得到房间屏幕上的项目符号123。那么为什么第二个线程/处理不起作用?那我该怎么办?谢谢。
答案 0 :(得分:2)
t = threading.Thread(target=set_msg(roomid[i]))
这不会将函数set_msg()
传递给线程。它调用函数并将结果传递给线程(在这种情况下,传递的值始终为None
,因为set_msg()
不会返回任何值)。如果在创建线程之前调用该函数,则该函数将不会在线程中运行。您需要将函数(及其参数)传递给Thread构造函数而不调用它:
t = threading.Thread(target=set_msg, args=(roomid[i],))