1

プロジェクトをマルチプロセスに変更して、より多くのリソースを使用できるようにすることを計画していました。これが私のデータベース モジュール コードです。

import pymysql
import threading
class tdb:
    def __init__(self):
        self.totalEffected = 0
        pass

    def start(self):
        self.conn = pymysql.connect(host='xxxx', port=3306, user='root', passwd='xxxx', db='xxxx', charset='utf8')

    def select(self,sql,args=None):
        cur = self.conn.cursor()
        cur.execute(sql,args)
        result = cur.fetchall()
        cur.close()
        return result

    def execute(self,sql,args=None):
        cur = self.conn.cursor()
        result = cur.execute(sql,args)
        cur.close()
        self.totalEffected+=result
        return result

#    def __commit(self,callback):

    def __commitCallback(self,result):
        print('commit result:',result)
        self.conn.close()

    def errorc(self,*args):
        print('error')

    def end(self):
#        init()
#        p.apply_async(self.conn.commit, callback=self.__commitCallback,error_callback=self.errorc)
        if self.totalEffected!=0:
            thread = threading.Thread(target=self.t)
            thread.start()
        else:
            self.conn.close()

#        p.apply(self.conn.commit)
#        self.conn.close()
#        print('result:' ,result.get())
    def t(self):
        self.conn.commit()
        self.conn.close()

本当に処理する必要がある唯一の操作は conn.commit() です。スレッドを使用してそれを行うので、すぐに戻ることができます。私はかつて Pool.apply_async() を使用しましたが、コールバックしなかったので、他のプロセスに私を呼び出す方法を知りたいので、受信を待つ時間を費やす必要はありません。

4

0 に答える 0