[修改部分内容,sorry有两点原来我没有讲清楚,我重新修改了示例代码
1 使用多线程是因为网络IO
2 下面的三个资源都是线程共享的,所以要加锁
]
优化多线程的效率问题
原先的多线程结构如下:
建立一个锁,所有不安全的函数都用这个锁
class():
self.lock = threading.lock()
def out_to_file1(self): #第一个资源
self.lock.acquire()
f = open(file1)
f.write()
f.close()
self.lock.release()
def out_to_file2(self): #第二个资源
self.lock.acquire()
f = open(file2)
f.write()
f.close()
self.lock.release()
def update_scan_count(self): #第三个资源
self.lock.acquire()
self.scan_count += 1
self.lock.release()
def _scan(self): #每个线程的内部逻辑
while self.queue.qsize() > 0 and self.is_continue:
...
此处代码为处理网络IO(我使用多线程的原因)
...
out_to_file2()
update_scan_count()
out_to_file1()
def main(self):
for i in range():
t = threading.Thread(target=self._scan, name=str(i))
setdaemon
t.start()
t.join()
现在考虑建立三个锁
lock1 = threading.lock()
lock2 = threading.lock()
lock3 = threading.lock()
分别锁住这三个资源
请问这样的效率会提高吗?有其他好的建议吗?多谢!
PS:求提供一些优秀的py多线程开源项目,想阅读学习一下!