python 多进程使用
迷茫
迷茫 2017-04-18 10:33:22
0
4
561

假设:有个数据操作,处理100万条数据,每个数据的value+1。
如简单代码假设

for x in range(1,100):
    x++

从数据库获取100条了,然后想多进程去执行x++?
还是说多进程去数据库获取数据?
谢谢了

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

répondre à tous(4)
PHPzhong

Il y a une question : s'il s'agit des données de la base de données, pourquoi ne pas exécuter SQL ? N'est-ce pas beaucoup plus efficace que le multi-processus ?
Si vous devez choisir l'une des deux options que vous avez proposées, alors considérez ceci :

1). 如果你要用多进程去数据库获取数据(就算你用了mysql连接池,可以不怎么考虑数据库连接的io消耗),
你每取一次数据,总要有一次查询吧, 完了以后,你还要把更新后的数据写入到数据库了, 又是一次数据库操作,
想想这个消耗有多大?
2). 数据库获取100万数据,然后想多进程去执行x++; 这种情况啊,只要计算机内存够(只有100万数据,基本是没问题的), 用python的进程池map一下,确实也是没什么问题
刘奇

Stockez d'abord les données d'origine dans la file d'attente (file d'attente), en tant que producteur
puis récupérez les données de la file d'attente, effectuez des opérations, en tant que consommateur
À ce stade, vous pouvez ouvrir plusieurs threads sur le consommateur (bien sûr vous Si le verrou est bien géré, le producteur peut aussi faire du multi-threading)

while tmp_queue.empty() is not True:
    x = tmp_queue.get()
    x += 1

Dans la file d'attente, s'il y a toujours un élément, le thread continuera à fonctionner.

PHPzhong

En fait, la meilleure façon d'implémenter le multi-traitement en Python est d'utiliser multiprocessingmap dans

Exemple (Python 3) :

# f.py
# 要对某个列表中每个元素都执行一次的function
def f(x):
    return x + 1
# main.py
from multiprocessing import pool

from f import f
# 创建进程池
p = pool.Pool(4)
lst = range(100)
# 使用多进程对整个列表进行计算
print(p.map(f, lst))
洪涛

Vous pouvez écrire directement les deux fonctions de lecture de données et de données +1 en une seule opération, puis utiliser plusieurs processus pour fonctionner, tout comme le pool de processus mentionné ci-dessus. Définissez la taille du pool de processus en fonction du nombre de cœurs de votre processeur. Puisqu'il n'y a pas de partage de mémoire ni de communication directe entre plusieurs processus, vous pouvez d'abord utiliser plusieurs processus pour lire toutes les données de la base de données, puis utiliser plusieurs processus pour effectuer val+1

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal