Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python同时下载文件并插入mysql数据库_Python_Mysql_Multithreading_Multiprocessing_Urllib2 - Fatal编程技术网

用python同时下载文件并插入mysql数据库

用python同时下载文件并插入mysql数据库,python,mysql,multithreading,multiprocessing,urllib2,Python,Mysql,Multithreading,Multiprocessing,Urllib2,我使用urllib2下载相对较大的文件(每个10mb),然后将其作为json文件加载,并将数据插入mysql数据库,然后在无限循环中重复该过程。下载大约需要一分钟,然后将所有内容加载到mysql中。有没有办法创建一个线程,在主线程使用python插入mysql时进行下载 我的伪代码: 非常感谢你 您可以使用线程和队列。文件IO线程将读取并处理该文件,然后将结果插入队列,数据库IO线程将在队列中发现结果并执行工作。我将在这里指导您,而不是编写一个示例: 或者,您可以使用pythonselect模

我使用urllib2下载相对较大的文件(每个10mb),然后将其作为json文件加载,并将数据插入mysql数据库,然后在无限循环中重复该过程。下载大约需要一分钟,然后将所有内容加载到mysql中。有没有办法创建一个线程,在主线程使用python插入mysql时进行下载

我的伪代码:


非常感谢你

您可以使用线程和队列。文件IO线程将读取并处理该文件,然后将结果插入队列,数据库IO线程将在队列中发现结果并执行工作。我将在这里指导您,而不是编写一个示例:


或者,您可以使用python
select
模块来管理多个文件读取操作,并在它们完成时逐个处理它们:

Twisted。Twisted永远是答案。Twisted(如Ignacio所说)或Tornado都是异步的。也许多处理器(或进程池)更安全。在多个处理器有用的情况下,一个好的点是:CPU限制的操作。在IO受限的情况下,额外的处理器不是问题所在——让IO不阻塞才是问题所在。太棒了,这正是我想要的。因此,我只需要用我自己的代码修改给定示例中的“run”函数?对——python线程的
start
方法转交给
run
方法,在该方法中定义线程将执行的工作。因此,您可能有一个线程类,其
run
方法下载并处理文件,另一个线程类的
run
方法执行数据库插入。正如示例所示,设置线程池很容易,因此可以同时下载/插入多个文件。
while 1:
 download file with urllib2
 decode as json file
 extract data I want
 do some computations on data
 insert data into mysql