parent
b28ac7f621
commit
de7c1c4234
5 changed files with 101 additions and 16 deletions
@ -0,0 +1,79 @@ |
||||
import pymysql |
||||
from pymysql.cursors import DictCursor |
||||
from multiprocessing import cpu_count |
||||
from update.models import Cinema |
||||
import queue |
||||
import threading |
||||
|
||||
|
||||
class GetVersion(object): |
||||
def __init__(self, cinema_ip_list=None): |
||||
self.cinema_ip_list = cinema_ip_list |
||||
self.queue = queue.Queue() # 注册队列 |
||||
self.th_num = 0 # 获取CPU核心数量,-1后座位处理逻辑的线程数量 |
||||
|
||||
def get_all_cinema(self): |
||||
print('get_all_cinema') |
||||
if self.cinema_ip_list is None: |
||||
all_cinema_obj = Cinema.objects.all() |
||||
else: |
||||
all_cinema_obj = Cinema.objects.filter(ip__in=self.cinema_ip_list) |
||||
for cinema_obj in all_cinema_obj: |
||||
print(cinema_obj) |
||||
data = { |
||||
'ip': cinema_obj.ip, |
||||
'db_user': cinema_obj.db_user, |
||||
'db_pwd': cinema_obj.db_pwd |
||||
} |
||||
self.queue.put(data) |
||||
cpu_num = cpu_count() - 1 if cpu_count() > 1 else 1 |
||||
cinema_num = len(all_cinema_obj) |
||||
self.th_num = cpu_num if cpu_num < cinema_num else cinema_num |
||||
print(self.queue) |
||||
|
||||
def main_process(self): |
||||
print('main_process') |
||||
self.get_all_cinema() |
||||
threads = [] |
||||
for i in range(self.th_num): |
||||
t = threading.Thread(target=self.get_cinema_ver, args=(self.queue,)) |
||||
threads.append(t) |
||||
for i in range(self.th_num): |
||||
threads[i].start() |
||||
for i in range(self.th_num): |
||||
threads[i].join() |
||||
|
||||
@staticmethod |
||||
def get_cinema_ver(q): |
||||
print('get_cinema_ver') |
||||
if q.empty(): |
||||
return |
||||
else: |
||||
cinema_config = q.get() |
||||
print(cinema_config) |
||||
sql_str = "SELECT * FROM cinema_version;" |
||||
ip = cinema_config.get('ip') |
||||
db_config = { |
||||
'host': ip, |
||||
'user': cinema_config.get('db_user'), |
||||
'password': cinema_config.get('db_pwd'), |
||||
'database': 'cine', |
||||
'connect_timeout': 5, |
||||
} |
||||
print(db_config) |
||||
db_conn = pymysql.Connect(**db_config) |
||||
db_cursor = db_conn.cursor(cursor=DictCursor) |
||||
db_cursor.execute(sql_str) |
||||
res = db_cursor.fetchone() |
||||
print(res) |
||||
update_data = { |
||||
'sys_ver': res['server_version'], |
||||
'client_ver': res['client_version'] |
||||
} |
||||
print(update_data) |
||||
Cinema.objects.filter(ip=ip).update(**update_data) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
v = GetVersion() |
||||
v.get_all_cinema() |
Loading…
Reference in new issue