30/09/2018, 19:28

Cách dùng multipleprocess trong python?

Mình viết 1 tool nhỏ để đo hiệu năng và khả năng chịu tải của mongodb khi 100k user(chỗ for mình test thử 100 trước) cùng truy cập vào 1 bảng lấy nó ra và where theo điều kiện.

Nhưng đang bị khúc mắc chỗ multipleprocess.

Khi chạy các tiến trình chạy loạn xà ngầu mình không quản lý được.

Có mấy vấn đề như vầy:

  1. Mình không hiểu sao mình insert ok. Nhưng select bằng find() - mình đọc document thì không thấy pymongo có cái nào select * table chỉ có hàm đó là lấy hết. Nhưng nó không lấy được dòng nào.

  2. Mình muốn hiển thị lên màn hình những dòng lấy ra luôn. Mình dùng ntn: result_queue.put(document) nhưng nó không hiện không hiểu sao.

Hình minh họa nó ntn:

Đây là code của mình:

import sys
import os
from pymongo import MongoClient
import random
import pymongo
import time
from datetime import datetime
import multiprocessing

def mongoSelectStatement(result_queue):
	client = MongoClient('mongodb://localhost:27017')
	db = client.random

	inserted_documents_count = 0

	start_time = datetime.now();
	cursor = db.random.find()
	inserted_documents_count = cursor.count()

	for document in cursor:
		result_queue.put(document)

	print 'Co ', inserted_documents_count, ' dong duoc lay trong ', (datetime.now() - start_time).total_seconds(), 's' , '
'

def main():
	processes = []
	result_queue = multiprocessing.Queue()
	startTime = datetime.now()
	for i in range(100):
		p = multiprocessing.Process(target=mongoSelectStatement, args=[result_queue])
		p.start()
		processes.append(p)

	print "Doi ket qua tra ve..."

	result = result_queue.get()
	
	for p in processes:
		p.terminate()
	endTime = datetime.now()
	print "Kqua tra ve: ", result, ' trong thoi gian ', (endTime - startTime)

if __name__ == '__main__':
	main()

Mong các bạn giúp đỡ và cho ý kiến.

r0ysy0301 viết 21:37 ngày 30/09/2018

Giúp mình với. Cảm ơn các bạn.

Quân viết 21:32 ngày 30/09/2018

code trong process đã excute đâu mà bạn đã terminate nó rồi thì tất nhiên là k lấy được gì rồi
thêm dòng này

for p in processes:
        p.join()

vào trước dòng

result = result_queue.get()
Bài liên quan
0