没有返回值的代码:
check_code = self._creat_check(3)
check_id = self._select_check_id(check_code)
one_thread = threading.Thread(target=self._rob, kwargs={'check_id': check_id})
two_thread = threading.Thread(target=self._rob, kwargs={'check_id': check_id})
one_thread.start()
two_thread.start()
可以接收返回值的代码:
class MyTread(threading.Thread):
def __init__(self, func, args=()):
super(MyTread, self).__init__()
self.func = func
self.args = args
def run(self):
self.result = self.func(*self.args)
def get(self):
try:
return self.result # 如果子线程不使用join方法,此处可能会报没有self.result的错误
except Exception:
return None
# 抢单:只生成一个订单,2人同时抢,断言一个成功,另一个失败(测试就剩一个检查单时是否加锁)
def test_05(self):
# 创建2个线程,同时抢单
check_code = self._creat_check(3)
check_id = self._select_check_id(check_code)
li = []
for i in range(1, 3):
if i == 1:
t = MyTread(self._rob, args=(check_id,))
if i == 2:
t = MyTread(self._rob2, args=(check_id,))
li.append(t)
t.start()
code_li = []
for t in li:
t.join()
code_li.append(t.result.get('code'))
print(t.result)
print(code_li)
if (code_li[0] == 500 and code_li[1] == 0) or (code_li[1] == 500 and code_li[0] == 0):
pytest.assume(1 == 1)
else:
pytest.assume(1 > 1, f'两人同时抢单断言失败,返回码:{code_li}')