在python中,如何将迭代器放入线程中,并在线程中无法使用返回值as next

在python中,如何将迭代器放入线程中,并在线程中无法使用返回值as next,python,python-3.x,python-multithreading,Python,Python 3.x,Python Multithreading,我现在正在构建两个组件,一个接收器(receiver.py)和一个scraper(一个软件)。刮板将从数据库中获取数据,并通过套接字发送给接收器。接收器中有一个机器学习模型,接收收集的数据并返回一个命令,以确定下一步应该收集什么样的数据。接收器中的套接字将侦听,直到收到“终止”命令。为了返回收集的数据并同时保持套接字打开,我使用“yield”并将套接字更改为生成器。并使用next()获取数据 当我分别运行接收器和刮板时,代码正确运行。收集的数据将通过套接字从scraper发送到接收器,并分配给变

我现在正在构建两个组件,一个接收器(receiver.py)和一个scraper(一个软件)。刮板将从数据库中获取数据,并通过套接字发送给接收器。接收器中有一个机器学习模型,接收收集的数据并返回一个命令,以确定下一步应该收集什么样的数据。接收器中的套接字将侦听,直到收到“终止”命令。为了返回收集的数据并同时保持套接字打开,我使用“yield”并将套接字更改为生成器。并使用next()获取数据

当我分别运行接收器和刮板时,代码正确运行。收集的数据将通过套接字从scraper发送到接收器,并分配给变量。我可以添加新的命令,让scraper搜索新数据(接收器和scraper的连接已关闭,但接收器中的套接字仍在侦听)

现在我需要将它们放在一个python文件中,并使用python命令启动scraper:

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()
但我不能再添加顺序或将收集的数据分配给变量

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数据,然后决定是否进行另一次搜索或搜索哪个字段。

您的代码示例不够完整。你发布的所有内容看起来都是正确的。这个错误一定是你在问题中遗漏了什么。@exhuma我可能没有说清楚。线程t1中的r_生成器应该是=r.start,但t1.start()不会发生任何事情,程序在t2完成时直接结束,软件无法连接到接收器中的套接字。如果使用r_generator=r.start(),则会引发错误:“generator”对象不可调用。您能用这些详细信息更新问题吗?这将使其他遇到这个问题的人更容易理解。@exhuma我有更详细的更新
t1 = Thread(target = r_generator).start()
r.add_order("search field 2")
t1.join()