使用xmlrpc(通过python)

时间:2016-09-06 05:00:04

标签: python multithreading openerp python-multithreading stress-testing

我尝试构建一个压力测试系统,它提供多个用户登录。该方案是1个用户登录的1个线程。但我不能同时登录多个用户(concurent)。

另一方面,我尝试使用顺序方案中的多个用户登录(使用thread.lock和thread.release over login方法),并且它可以正常工作。

我可以在这样的python线程方案上同时登录多个用户吗?

这是我的代码 (的更新 我更新了我的代码,现在我尝试通过多线程读取xml_rpc。 打开连接/登录是可以的,但我总是得到读取方法的失败回报 .. ):

此线程类:

class theUser (threading.Thread):
    def __init__(self, threadID, row, dbhost, xml_port, dbuser, dbpassword, dbname):
        threading.Thread.__init__(self)
        self.threadID   = threadID
        self.name       = str(row[0])
        self.pswd       = str(row[1])
        self.msg        = ''
        self.xml_port   = xml_port
        self.params={'dbhost'   : dbhost,
                    'dbuser'    : dbuser,
                    'dbpassword': dbpassword,
                    'dbname'    : dbname,
                    'user'      : str(row[0]),
                    'password'  : str(row[1])
                }

    def run(self):
        try:
            self.sock_common    = xmlrpclib.ServerProxy ('http://%s:%s/xmlrpc/common' % (dbhost, xml_port))
            self.uid = self.sock_common.login(self.params['dbname'], self.name, self.pswd)                    

            self._read_data()

        except:
            return

    def _read_data(self):
        self.ids = [1,2,3,10]
        self.sock_common.execute(self.params['dbname'], self.uid, self.params['password'], 'res.partner', 'read', self.ids, ['name'])            

这是主要代码:

for row in reader:
    print idx, xml_port, row

    if idx == 0:
        header = row

    else:
        # Create new User threads
        thread_ = theUser(idx, row, dbhost, xml_port, dbuser, dbpassword, dbname)

        # Start new User Threads
        thread_.start()

        # Add threads to thread list    
        threads.append(thread_)

    idx += 1

请帮帮我..

1 个答案:

答案 0 :(得分:1)

您在创建xml_port时忘记了theUser,它应该是:

thread_ = theUser(idx, row, dbhost, xml_port, dbuser, dbpassword, dbname)

如果引发异常,self.sock_common将无法设置。您可以将其移至run()函数。

阅读res.partner

def _read_data(self):
    self.ids = [1,2,3,10]
    models = xmlrpclib.ServerProxy('http://%s:%s/xmlrpc/object' % (dbhost, xml_port))
    res = models.execute(self.params['dbname'], self.uid, self.params['password'], 'res.partner', 'read', self.ids, ['name'])
    print res

您可以使用以下方式检查给定用户是否被允许阅读:

models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url))
models.execute_kw(db, uid, password,
'res.partner', 'check_access_rights',
['read'], {'raise_exception': False})

如果用户可以阅读,则应返回true

  

此脚本来自Odoo Web Service API