python多线程数据混乱(python为什么不支持多线程)

http://www.itjxue.com  2023-01-25 03:59  来源:未知  点击次数: 

python 为什么多线程会造成数据不准

如果你的代码是CPU密集型,多个线程的代码很有可能是线性执行的。所以这种情况下多线程是鸡肋,效率可能还不如单线程因为有context switch 但是:如果你的代码是IO密集型,多线程可以明显提高效率。例如制作爬虫

python有1000个url请求 放到queue 再十个线程 这样输出的数据是乱的 必须加锁么

题主的问题表述不清,尤其十个线程做了哪些工作没说明,我从字面猜测,是把1000个url放在队列里,然后十个线程从队列中取出url,请求之后,调用输出函数。

先说队列的问题,通常的设计里,queue只在添加元素,摘取元素的时候内部加锁,以保证队列数据不出错,至于从queue中取出数据后怎么处理,要不要放临界区,queue是不管的,也不应该管,python的Queue模块提供了相应的Queue类。

再说输出结果是乱的,又是表述不清,如果你指的是最终输出到一个文件里,文件内容乱了,那给你4种解决办法:

1. 线程里每个url在请求到内容后,在写文件时设立临界区,保证串行输出,强烈不建议这种方式。

2. 对每个url的请求内容写一个文件,最后合并文件,这种最灵活。

3. 对每个工作线程的输出写一个文件,最后合并文件,最有并行style

4. 对每个url的请求内容再次写到一个队列里,另一个线程读取此队列写文件,最有设计模式style

如果你要保证输出结果是与输入url同序的,建议你采用上面第2种办法,合并文件的时候保证与url队列同序

为什么有人说 Python 的多线程是鸡肋呢?

首先,我并不认同这个观点,我觉得觉得Python 的多线程是鸡肋多余的人,应该还没有完全使用过Python 的多线程功能,并没有发掘它的潜在能力。

什么是Python多线程

多线程指的是在我们操作的时候是可以同步执行多个任务,线程的特点是线程内部可以共享内存和变量,并且相比较而言可以消耗更少的资源。但是,在unix环境下,多进程与多线程之间的资源差距不明显,UNIX调度速度快。多线程的缺点就是线程之间的同步和锁定更麻烦。我们需要知道的是线程属于进程的一部分。

Python多线程的特点

对于多线程来说,目前最为人所诟病的一点就是,它容易导致数据错乱,原因是因为,它在改变变量时共享数据会出现多个线程,并使用相同的资源,从而导致死锁和数据混乱。这也是它的最大的特点,可以在线程之间共享数据。

Python多线程的优点

Python多线程最大的优点就是使用方便,很多时候我们并不需要做大量的密集型数据的处理运算,这时候用Python多线程是最方便快捷的,可以大大减少工作量、提高工作效率。

总结

从以上几点我们就可以看出,Python多线程并不鸡肋,只是有时候使用者在不巧当的地方使用,它自然不是那么顺手,我们加深熟悉了解Python多线程的适用范围。

(责任编辑:IT教学网)

更多

推荐新手入门文章