Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中实现进程之间的同步?_Python_Multiprocessing - Fatal编程技术网

如何在python中实现进程之间的同步?

如何在python中实现进程之间的同步?,python,multiprocessing,Python,Multiprocessing,我计划将我的项目改为多进程,这样我可以使用更多的资源,下面是我的数据库模块代码 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', pass

我计划将我的项目改为多进程,这样我可以使用更多的资源,下面是我的数据库模块代码

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\u async,但它没有回调,所以我想知道如何让另一个进程调用我,这样我就不必花时间等待接收。

这段代码有什么问题?看起来大部分工作都是在数据库中完成的,而您创建的线程只是花时间等待提交和接近完成。根据数据库驱动程序的质量,数据库线程应解锁GIL并允许主线程继续运行。