我想抓住蟒蛇的子弹屏。这个过程是,我将收到响应后,发送登录和其他一些消息到弹幕服务器。
当我计划抓取两个房间的弹幕时,我只能得到第一个请求的响应。
代码是这样的:
# 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()多进程和线程处理都不能成功。因为我用有线硬来分析tcp。只有第一个请求和它的回应。此外,我只能得到123房间的屏幕子弹。那么,为什么第二个线程/处理不能工作呢?那我该怎么办呢?谢谢。
发布于 2018-11-23 17:09:38
T=threading.Thread(target=set_msg(房间))
这不会将函数set_msg()传递给线程。它调用函数并将结果传递给线程(在本例中,传递的值总是None,因为set_msg()不返回任何内容)。如果在创建线程之前调用函数,则该函数将不会在线程中运行。您需要将函数(及其参数)传递给线程构造函数,而不调用它:
t = threading.Thread(target=set_msg, args=(roomid[i],))https://stackoverflow.com/questions/53450288
复制相似问题