如何解决如何将迭代器放入python的线程中,并获取返回值,因为下一个不能在线程中使用
我现在正在构建两个组件,一个接收器(receiver.py)和一个刮板(一个软件)。刮板将从数据库中获取数据并通过套接字发送给接收器。接收器中有一个机器学习模型,接收收集的数据并返回命令以确定接下来应收集哪种数据。接收器中的套接字将侦听直到接收到“终止”命令。为了返回收集的数据并同时保持套接字打开,我使用“ yield”并将套接字更改为生成器。并使用next()获取数据
class receiver:
def __init__(self,orders):
self.orders = orders #orders is a list
def start(self):
while True:
client_socket.send(orders)
collected_data = client_socket.recv(1024)
yield collected_data
def add_order(self,new_orders):
self.orders.append(new_orders)
r = receiver("search field 1") #ask the scraper to search field 1
r_generator = r.start()
field1_data = next(r_generator)
r.add_order("search field 2")
field2_data = next(r_generator)
当我分别运行接收器和刮板时,代码可以正确运行。收集的数据将通过套接字从刮板发送到接收器,并分配给变量。我可以添加新命令以使抓取工具搜索新数据(接收器和抓取器的连接已关闭,但接收器中的套接字仍在侦听)
现在我需要将它们放到一个python文件中,并使用python命令启动刮板:
subprocess.check_output('cmd run scaper')
我需要同时运行它们,因此我使用线程
r_generator = r.start
t1 = Thread(target = next,args=(r_generator)).start()
t2 = Thread(target = subprocess.check_output('cmd run scaper')).start()
但是我不能再执行add_order或将收集的数据分配给变量为
field1_data = next(r_generator)
field1_data = next(t1)
不可行,并且
t1 = Thread(target = r_generator).start()
r.add_order("search field 2")
t1.join()
“搜索字段2”的顺序将在线程启动后直接添加,但是我想要的是首先获取字段1的数据,然后决定是否进行其他搜索或应该搜索哪个字段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。