# -*- coding: utf-8 -*-

import threading

'''

多线程生成日志工具

'''

__author = [

'"yangfei" '

]

#该方法主要用于写入300行WARN日志

def writeWarnLog(file):

count=0;

while count<300:

try:

file.write('2012-11-28 22:51:01|zookeeper|WARN|m1|172.17.1.15\n')

count+=1

except Exception ,e:

print 'write warn log error',str(e)

break

print 'write warn log finished'

#该方法主要用于写入100行ERROR日志

def writeErrorLog(file):

count=0;

while count<100:

try:

file.write('2012-12-12 22:22:22|zookeeper|ERROR|m1|all\n')

count+=1

except Exception ,e:

print 'write error log error',str(e)

break

print 'write error log finished'

def main():

fileName='zookeeper.log'

mode='w+' #通过追加写日志文件

#创建两个线程来写文件

try:

f=open(fileName,mode)

t1=threading.Thread(target=writeWarnLog,args=(f))

t2=threading.Thread(target=writeErrorLog,args=(f))

t1.start()

t2.start()

t1.join()

t2.join()

except Exception,e:

print 'write log failed,',str(e)

finally:

f.close()

print 'write log finished'

if __name__=='__main__':

main()

这上面的代码存在Bug,直接运行的话,会出现如下错误信息:

Exception in thread Thread-2:

Traceback (most recent call last):

File "/opt/python/lib/python2.7/threading.py", line 551, in __bootstrap_inner

self.run()

File "/opt/python/lib/python2.7/threading.py", line 504, in run

self.__target(*self.__args, **self.__kwargs)

TypeError: writeErrorLog() takes exactly 1 argument (0 given)

Exception in thread Thread-1:

Traceback (most recent call last):

File "/opt/python/lib/python2.7/threading.py", line 551, in __bootstrap_inner

self.run()

File "/opt/python/lib/python2.7/threading.py", line 504, in run

self.__target(*self.__args, **self.__kwargs)

TypeError: writeWarnLog() takes exactly 1 argument (0 given)

异常是说,两个线程的执行的方法需要一个参数,而我并没有给参数,但是通过实际代码查看,明明是都给了一个参数:

t1=threading.Thread(target=writeWarnLog,args=(f))

t2=threading.Thread(target=writeErrorLog,args=(f))

刚开始我遇到这个问题,感觉很奇怪,明明是给了参数的,但是为什么还说,没有提供参数呢??代码逻辑上也没有错啊,搞不定!

然后查询了Python的API,发现关于args的说明是这样的:

args is the argument tuple for the target invocation. Defaults to ().

就是说,这个args是个元组,必须传一个元组,而我这里给的(f)并不是一个元组,如果元组只有一个元素时,格式应该是(element,),不能少了那个逗号,也就是说上门两行代码应该写成如下格式:

t1=threading.Thread(target=writeWarnLog,args=(f,))

t2=threading.Thread(target=writeErrorLog,args=(f,))

修改之后,执行成功,不小心导致的,坑爹啊!

但是!

我试了一下,如果把那两行代码中,参数改为数组格式,照样执行成功,即:

t1=threading.Thread(target=writeWarnLog,args=[f])

t2=threading.Thread(target=writeErrorLog,args=[f])

这个就有点更坑爹,目前还不得其奥妙.........

5

0

分享到:

2012-11-29 18:29

浏览 19866

评论

2 楼

bluky999

2016-01-11

这个存在同步问题,会导致你的写入串行或者顺序不符合预期,需要加一个 RLock  ;

或者可以不用自己写文件,而是要logging模块,支持多线程。

1 楼

somefuture

2012-11-30

从Java转向python的时候,刚开始会很兴奋,觉得很奇妙。比如限制整数大小时,可以3

不过随着深入,就发现各个脚本差不多,还是js方便。

python多线程写同一文件_Python多线程写文件实例相关推荐

  1. python不同数据的读入_python读写不同编码txt文件_python读写txt文件

    python读写不同编码txt文件_python读写txt文件 以后整理规范 [python] view plaincopy import os import codecs filenames=os. ...

  2. python多线程下载多个文件_python多线程下载文件 练习1

    ***今天在我BF的帮助下完成了小小的程序,也是我第一次写博客呢,谢谢他哦嘎嘎 1.首先,计算出下载文件的长度. conn = urllib.urlopen(url) headers = conn.i ...

  3. python 多线程读写文件_Python多线程同步---文件读写控制方法

    1.实现文件读写的文件ltz_schedule_times.py #! /usr/bin/env python #coding=utf-8 import os def ReadTimes(): res ...

  4. python 多线程读写文件_python多线程同步之文件读写控制

    本文实例为大家分享了python多线程同步之文件读写控制的具体代码,供大家参考,具体内容如下 1.实现文件读写的文件ltz_schedule_times.py #! /usr/bin/env pyth ...

  5. python多线程处理文件_python多线程分块读取文件

    # _*_coding:utf-8_*_ import time, threading, ConfigParser ''' Reader类,继承threading.Thread @__init__方法 ...

  6. python怎么开始打代码_Python代码写好了怎么运行?

    Python代码写好了怎么运行?相信问这样问题的朋友一定是刚刚入门Python的初学者.本文就来为大家详细讲讲如何运行Python代码.一般来讲,运行Python代码的方式有两种,一是在Python交 ...

  7. python多线程执行同样代码_Python 多线程、多进程 (一)之 源码执行流程、GIL

    一.python程序的运行原理 许多时候,在执行一个python文件的时候,会发现在同一目录下会出现一个__pyc__文件夹(python3)或者.pyc后缀(python2)的文件 Python在执 ...

  8. python怎么做乘法表_python怎么写乘法表

    代码如下: 代码详解(为了让自己理解):for i in range(1,10): # print(i,end = ' ') for j in range(1,i+1): print('%s*%s=% ...

  9. python读取手机文件_python 读取 网络 文件

    Python之pandas数据加载.存储 Python之pandas数据加载.存储 0. 输入与输出大致可分为三类: 0.1 读取文本文件和其他更好效的磁盘存储格式 2.2 使用数据库中的数据 0.3 ...

  10. python如何实现下载文件_python实现下载文件的三种方法

    python实现下载文件的三种方法 Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件. ...

最新文章

  1. 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)
  2. linux个人常用命令备注
  3. 经典C语言程序100例之五九
  4. java 企业信息门户 拖拽排版_web中拖拽排序与java后台交互实现
  5. python socket传输图片_python使用socket传输图片视频等文件的实现方式
  6. 美团点评境外度假团队前端项目开发实践总结
  7. 怎么看台式计算机是几位的,怎么看电脑是32位还是64位?一目了然
  8. 快到起飞 | PP-LCNet在CPU上让模型起飞,精度提升且比MobileNetV3+快3倍
  9. 13、几点小结,unsigned long long
  10. 迅雷地址转换 php,PHP迅雷/快车/QQ旋风下载地址与普通URL链接互转
  11. 如何在Google Play 当中使用ASO?google play aso
  12. 美业SaaS的创业分享之[技术]:产品研发和架构在组织管理中的挑战
  13. 威廉希尔赔率分析和结论
  14. CISSP考点拾遗——介质净化
  15. bilibili直播间利用python爬虫自动发送弹幕
  16. 游戏中子弹的回收重用
  17. steam如何一键登录_如何在Steam上启用一键通
  18. 洛必达法则——“高等数学”
  19. 文件下载成excel
  20. 感悟生活,我们的创造力去哪了?谈谈我们的教育

热门文章

  1. linux安装nodejs一键脚本,ubuntu16.04部署nodejs+vue框架脚本
  2. 数字能查出笔迹吗_大家都知道文字可以做笔迹鉴定,我想问一下专家阿拉伯数字是否也可以做笔迹鉴定正确率高吗?...
  3. html5 支持php标签吗,HTML5新增标签使用方法
  4. Logistic Regression:最基础的神经网络
  5. fatal error: Python.h: No such file or directory
  6. win7上安装wince6.0
  7. Ubuntu中用gedit保存文件失败的解决办法
  8. python爬虫抓取文本_Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例...
  9. 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(NumPy科学计算库<矩阵和随机数>python)
  10. 【转】ABP源码分析二十五:EventBus