python 使用multiprocessing需要注意的问题

本文探讨了在Python中使用多进程进行数据库操作时可能出现的问题,特别是在共享数据库连接方面。通过一个具体的代码示例,展示了当多个进程尝试使用同一个数据库连接进行操作时,可能会导致的数据不一致或错误。文章强调了在多进程环境下正确管理和使用数据库连接的重要性。

我们在编写程序的时候经常喜欢这样写代码

import MySQLdb
import time
from multiprocessing import Process

conn = MySQLdb.connect(localhost, vearne, xx, test)

def f(name):
    for i in xrange(10):
        cursor = conn.cursor()
        sql = "insert into car(name) values(%s)"
        param = [(name)]
        print param
        #time.sleep(1)
        n = cursor.execute(sql,param)
        cursor.close()
        conn.commit()

if __name__ == __main__:
    for i in xrange(10):
        p = Process(target=f, args=(bob,))
        p.start()

上面的程序有问题吗? 
以上的程序在单进程的情况下,应该是没有问题,但是在多进程的情况下,它是有错误的。

首先看看下面的源码

class Process(object):
    ‘‘‘
    Process objects represent activity that is run in a separate process

    The class is analagous to `threading.Thread`
    ‘‘‘
    _Popen = None

    def __init__(self, group=None, target=None, name=None, args=(), kwargs={}):
        assert group is None, group argument must be None for now
        count = _current_process._counter.next()
        self._identity = _current_process._identity + (count,)
        self._authkey = _current_process._authkey
        self._daemonic = _current_process._daemonic
        self._tempdir = _current_process._tempdir
        self._parent_pid = os.getpid()
        self._popen = None
        self._target = target
        self._args = tuple(args)
        self._kwargs = dict(kwargs)
        self._name = name or type(self).__name__ + ‘-‘ +                      ‘:‘.join(str(i) for i in self._identity)

    def run(self):
        ‘‘‘
        Method to be run in sub-process; can be overridden in sub-class
        

转载于:https://www.cnblogs.com/ExMan/p/10143033.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值