在python中向多个API发出多线程请求

在python中向多个API发出多线程请求,python,multithreading,http,thread-safety,Python,Multithreading,Http,Thread Safety,因此,我像这样开始我的代码,只需打开两个线程,给出两个单独的函数,并抛出它们相同的输入。在这两个函数中,我都调用API for message in messages: self.numberT+=1 if(self.numberT%100==0): print str(self.numberT) thread1= threading.Thread(target

因此,我像这样开始我的代码,只需打开两个线程,给出两个单独的函数,并抛出它们相同的输入。在这两个函数中,我都调用API

for message in messages:
                self.numberT+=1
                if(self.numberT%100==0):
                    print str(self.numberT)
                thread1= threading.Thread(target=self.worker_gender,args=(message,))
                thread2 = threading.Thread(target=self.worker_sentiment,args=(message,))

                thread1.start()
                thread2.start()
然后,我对响应执行我想要的操作。我想我在这里做一些不安全的线程。两者的响应都是JSON文件,具有明显不同的字段。我发现在定义之前正在使用响应的错误被捕获。响应变量是一个字典,所以我可以访问它,当我这样做时,我发现字段不存在(有时)。我认为我的线程代码是在错误的响应上执行的,我从线程1得到了预期的响应,但它正在线程2中使用,以此类推。如果有人能给我指出一些资源,让这一切不发生,那就太好了

另一个可能的问题是,对于每条消息,我打开了两个正在访问两个API的线程。因此,当这开始进行时,我可以有1000个线程,例如调用API 1和1000个线程并行调用API 2。我不知道这是否也有关系

我真的认为我在用http请求创造人为的竞争条件


谢谢大家的帮助。

unirest线程安全吗?否则,我建议尝试请求()。@PietervandenHam Unirest似乎与请求相同。1。不要使用1000个线程来发出1000个请求。或async.io而不是2。要查看您的代码是否使用了不应该使用的数据,请使用多个进程进行测试(只需更改导入(例如,删除
.dummy
),API是相同的),谢谢大家的回答。
response = unirest.get(correct stuff),