python多线程数据混乱,在多线程时 线程中修改类变量是否会引起数据混乱

1 , 在多线程时 线程中修改类变量是否会引起数据混乱如果实例是全局的应该得加锁,子线程里实例化的应该不用【python多线程数据混乱,在多线程时 线程中修改类变量是否会引起数据混乱】
2,怎么用python整理混乱的数据如果整理,这得看具体的数据才行 。Python提供了 Panas, NumPy 包,可用于数据整理、分析 。如果想知道原因,可以看看python版本升级的pep文档 。文档里有一些来龙去脉 。学习还是从3.0入手 。3.0会渐渐广泛使用的 。是趋势 。新瓶子装新酒 。不要被2.x的历史问题纠缠 。看3.0的标准库文档 。
3,求助求Python多线程打印信息图形化显示的解决方案原帖由 lvscar 于 2006-8-24 04:59 发表我想到的 道路曲折一点 。。。。假设有4个线程 。。分别把每个线程的stout 重定向到不同的文件 。再用第五个线程 读取这4个文件, , 格式化后 。输出 。不用这么麻烦 。进程里有一个公用的list,每个线程负责向list里添加要输出的内容(添加时当然要lock),然后启用一个单独的线程,负责把list里的内容写出来,并删除已经输出的内容(当然也要lock the list)楼主说的是控制台下还是GUI?GUI应该好解决吧 。我也有控制台下输出的问题,一直没有解决呢 。
4,python有1000个url请求 放到queue 再十个线程 这样输出的数据是乱的题主的问题表述不清 , 尤其十个线程做了哪些工作没说明,我从字面猜测,是把1000个url放在队列里,然后十个线程从队列中取出url , 请求之后,调用输出函数 。先说队列的问题,通常的设计里 , queue只在添加元素,摘取元素的时候内部加锁,以保证队列数据不出错,至于从queue中取出数据后怎么处理,要不要放临界区,queue是不管的 , 也不应该管,python的Queue模块提供了相应的Queue类 。再说输出结果是乱的,又是表述不清 , 如果你指的是最终输出到一个文件里,文件内容乱了,那给你4种解决办法:1. 线程里每个url在请求到内容后,在写文件时设立临界区,保证串行输出 , 强烈不建议这种方式 。2. 对每个url的请求内容写一个文件,最后合并文件,这种最灵活 。3. 对每个工作线程的输出写一个文件 , 最后合并文件,最有并行style4. 对每个url的请求内容再次写到一个队列里 , 另一个线程读取此队列写文件,最有设计模式style如果你要保证输出结果是与输入url同序的,建议你采用上面第2种办法 , 合并文件的时候保证与url队列同序可以使用多进程或多线程并发下载 。其实你的方法已经是多进程的一种了 。python中有多进程模块multiprocessing和多线程multithreading 。思路是这样,将需要下载的连接送入队列 , 然后各个进程(或线程)从队列里拿任务然后下载 。前面的两个类库都...3997再看看别人怎么说的 。5,MFC多线程写文件出现数据混乱写文件很快的不太极端追求高实时性 , 不需要开新线程去写 , 可能还因为创建新线程还花更多的开销另外多线程执行顺序确实不是可预测的,开了一堆线程,不能保证先开的线程就一定执行在最前,所以数据写入顺序是错的,可以理解你可以把要写的文本添加到类似List<CString>中,往末尾追加 , 再开线程,线程去看List<CString>中有几个元素,没有就结束线程 , 有就从头元素开始写入文本文件,写完一个,删除头元素 , 再判断是否有元素,有就继续写头个元素,写完删 ,  。。。。。。这样就能保证写入顺序了,当然取出元素/删除元素时,要Section.Lock / Unlock我喜欢用两个List<CString>,写的时候,标记下 , 让添加文本的都添加到另一个列表中,写完后,修改标记,以示切换这两个List,让添加文本的线程都添加到先前写完了的列表,写线程转去写另外一个列表简单的说,不能跨线程访问mfc窗口对象 。mfc句柄封装类只在创建句柄的线程中有效,在其它线程中访问会出现无法预料的结果 。适当的访问方式是直接访问句柄 。更多信息参见 http://www.csdn.net/develop/read_article.asp?id=23171有点不明白,为什么写个日志都要起个线程呢 , 那样不是更慢吗? 毕竟启动一个线程是一个很大的开销啊并且多个线程,你无法保证哪个线程先运行,所以写进去的数据无法保证先后顺序了;你这种情况,我觉得用OVERLAPPED那个异步的文件写操作就可以满足了 , 没必要开线程”临界区“其实不知道什么是共享资源,也不会智能保护共享资源 。其根本是,同一个时刻如果有多个线程调用lock的时候,只有一个线程返回 , 其余线程则暂停执行,等待前面线程调用Unlock之后再执行 。说实话 , 编程的时候应该尽量不用这种模式,因为临界区的锁定几乎没法按照实际情况调试,而在我看来 , 你这个只是为了写日志,完全没必要使用到CCriticalSection 。你这种使用中,每次都启动一次线程 , 然后打开关闭一次文件,还进行了文件跳转,更加了临界区锁定,耗费的资源实在太多了 。建议:使用线程消息环 , 线程只启动一次(主进程入口),启动即通过Share方式打开文件,跳转到文件末尾 。创建消息环,等待主线程消息;每次写日志 , 只是向同一个(而不是每次创建一个)线程POST发送消息,线程接收消息后,直接写入文件(因为已经是文件末尾了),写完成后消息响应结束 。因为消息机制有默认排队 , 那么不存在同时写的问题,而同一个线程,也不会需要“临界区”来处理资源共享,这样无论调试还是使用 , 都非常方便 。

    推荐阅读