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

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

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

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

迷茫
迷茫

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

membalas semua(4)
PHPzhong

Ada soalan: Jika ia adalah data dalam pangkalan data, mengapa tidak melaksanakan sql bukankah ini lebih cekap daripada berbilang proses?
Jika anda perlu memilih salah satu daripada dua pilihan yang anda berikan, maka pertimbangkan ini:

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

Mula-mula simpan data asal dalam baris gilir (baris gilir), sebagai pengeluar
dan kemudian ambil data daripada baris gilir, lakukan operasi, sebagai pengguna
Pada masa ini, anda boleh membuka berbilang rangkaian pada pengguna (sudah tentu anda Jika kunci dikendalikan dengan baik, pengeluar juga boleh melakukan multi-threading)

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

Dalam baris gilir, jika sentiasa ada elemen, benang akan terus beroperasi.

PHPzhong

Malah, cara terbaik untuk melaksanakan pelbagai pemprosesan dalam Python ialah menggunakan multiprocessingmap dalam

Contoh (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))
洪涛

Anda boleh menulis terus dua fungsi membaca data dan data +1 ke dalam satu operasi, kemudian menggunakan berbilang proses untuk beroperasi, sama seperti kumpulan proses yang dinyatakan di atas. Tetapkan saiz kolam proses mengikut bilangan teras cpu anda. Memandangkan tiada perkongsian memori atau komunikasi langsung antara berbilang proses, anda boleh menggunakan berbilang proses dahulu untuk membaca semua data daripada pangkalan data, dan kemudian menggunakan berbilang proses untuk melaksanakan val+1

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!