问题描述
我现在正在构建两个组件,一个接收器(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 (将#修改为@)