我尝试构建一个压力测试系统,它提供多个用户登录。该方案是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
请帮帮我..
答案 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