python多线程写同一文件_Python多线程写文件实例

# -*- 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

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-11-29 18:29

浏览 19866

评论

2 楼

bluky999

2016-01-11

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

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

1 楼

somefuture

2012-11-30

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java asc码_Java中ASC码与字符互相转化

package com.ljq.test;/*** Java中ASC码与字符互相转化** author jiqinlin**/public class ASCTest {private static int ascNum;private static char strChar;public static void main(String[] args) {System.out.println(getAsc("a"));System.out.println(backcha…

hp 导出日志 远程管理卡_惠普服务器远程管理卡安装详解

可以远程管理服务器。带惠普基于Web的网络资源管理和性能监视工具HP Toptools惠普远程管理卡的主要功能是可以实现对服务器的远程监控&#xff0c;其中包括察看日志、远程诊断、远程开/关机、重启等等。基于惠普远程管理卡的重要功能&#xff0c;本文将着重介绍惠普远程管理卡的…

java 错误登陆次数_纯java代码实现登陆次数验证,登陆错误5次之后锁定30分钟

本方法因为是根据思路纯手写&#xff0c;代码可以再简化&#xff0c;功能尝试没问题&#xff0c;最主要就是在登陆验证中的逻辑&#xff0c;checkLogin()方法是登录前的验证&#xff0c;而真正的登陆方式采用的是Shiro&#xff0c;若不是采用Shiro登陆&#xff0c;将该逻辑采用…

java 监听器 分类_java过滤器和监听器详解 分类: 学习专区

过滤器1、Filter工作原理(执行流程)当客户端发出Web资源的请求时&#xff0c;Web服务器根据应用程序配置文件设置的过滤规则进行检查&#xff0c;若客户请求满足过滤规则&#xff0c;则对客户请求&#xff0f;响应进行拦截&#xff0c;对请求头和请求数据进行检查或改动&#x…

linux java启动脚本文件_不错的linux下通用的java程序启动脚本

#!/bin/sh#该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用&#xff0c;#也可以作为启动java程序的独立脚本来使用。##Author: tudaxia.com, Date: 2011/6/7##警告!!!&#xff1a;该脚本stop部分使用系统kill命令来强制终止指定的java程序进程。…

linux心跳包检测代码_OpenSSL心跳包越界读敏感信息泄漏漏洞

发布日期&#xff1a;2014-04-10CVE ID&#xff1a;CVE-2014-0160受影响的软件及系统&#xff1a;OpenSSL 1.0.1&#xff0d;OpenSSL 1.0.1fOpenSSL 1.0.2-betaOpenSSL 1.0.2-beta1未受影响的软件及系统&#xff1a;OpenSSL 0.9.8OpenSSL 1.0.0OpenSSL 1.0.1gOpenSSL 1.0.2-bet…

mysql数据库主要负责存储_mysql数据库自带数据库介绍

show databases&#xff1b;查看mysql自带数据库有information_schema&#xff0c;mysql&#xff0c; performance_schema&#xff0c; testinformation_schema数据库有40张表&#xff0c;如下。在MySQL中&#xff0c;把 information_schema 看作是一个数据库&#xff0c;确切说…

python 编辑数学公式_Jupyter快速编辑高大上数学公式 泰勒展开式

欢迎点击「算法与编程之美」↑关注我们&#xff01;本文首发于微信公众号&#xff1a;"算法与编程之美"&#xff0c;欢迎关注&#xff0c;及时了解更多此系列博客。人工智能的基础是机器学习&#xff0c;而通过之前的几篇博客了解到&#xff0c;机器学习的基础是数学…

用猎物皮毛换酒喝java_荒野大镖客2三星毛皮狩猎技巧分享 各种类猎物三星皮毛获取方法...

荒野大镖客2三星毛皮怎么获得&#xff1f;想必很多朋友都还不是很清楚吧&#xff0c;所以呢小编今天给大家带来的就是荒野大镖客2三星毛皮狩猎技巧分享&#xff0c;需要的朋友还不快进来看看&#xff1f;三星毛皮狩猎技巧分享猎物体型分水岭建议以狐狸类为例。(1)中型猎物[比狐…

Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用...

近来由于项目需要&#xff0c;需要用到手机短信验证码的功能&#xff0c;其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口&#xff0c;下面我把我在项目中用到的记录一下&#xff0c;以便给大家提供个思路&#xff0c;由于本人的文采有限&#xff0c;还请大…

java中select的用法_mybaties中select用法,以及常用增删改查

查询语句是使用 MyBatis 时最常用的元素之一select元素配置细节如下属性描述取值默认id在这个模式下唯一的标识符&#xff0c;可被其它语句引用parameterType传给此语句的参数的完整类名或别名resultType语句返回值类型的整类名或别名。注意&#xff0c;如果是集合&#xff0c;…

Js获取短信验证码前段效果

一&#xff1a;先上效果图&#xff1a; 二&#xff1a;源代码文件&#xff1a;reg.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http:…

java简述标识符和保留字区别_Java 基础语法 - 流年似水莫停留的个人页面 - OSCHINA - 中文开源技术交流社区...

Java 基础语法一个Java程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对象&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff0c;它的…

java拉丁正方形_LeetCode JAVA解题---824. 山羊拉丁文

LeetCode 题库 全 JAVA 解题824. 山羊拉丁文原题回顾&#xff1a;给定一个由空格分割单词的句子 S。每个单词只包含大写或小写字母。我们要将句子转换为 “Goat Latin”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。山羊拉丁文的规则如下&#xff1a;如果单词以元音开头(a, …

opencv 滤镜效果php,OpenCV实现马赛克和毛玻璃滤镜效果

本文为大家分享了OpenCV实现马赛克和毛玻璃滤镜的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下一、马赛克效果马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内随机选取的一个像素点的颜色代替&#xff0c;这样可以模糊细节&#xff0c;但是可…

微信端php 开发技术要求,微信第三方平台开发详解——PHP版

申请第三方平台&#xff0c;这个很简单直接按照提示填写&#xff0c;下面的授权事件接收URL中获取的component_verify_ticket是会过期的&#xff0c;所以不要只获取一次&#xff0c;缓存起来每10分钟会发送一次&#xff0c;每1小时会更新一次。附上我的获取component_verify_ti…

刷题神器怎么导入java,怎么导题库_有没有比较好的可以自己导入题库进行模拟考试练习的软件_淘题吧...

① 本人有一题库&#xff0c;怎么把里面的试题全部导出题库都加密了&#xff0c;没有导出功能。只能固定抽题后&#xff0c;整理出来。② 在线考试系统题库怎么导入数据库优考试的考试系统导入题库是用word和excel的模板去编辑试题&#xff0c;再进行导入③ 如何导出机考app题库…

Java读取指定目录下的所有文件名

1.效果图&#xff1a;在控制台输出所有的文件的文件名如下&#xff1a; 2.FileUtil.java: package cn.gov.csrc.base.report.util;import java.io.File; import java.util.ArrayList;public class FileUtil {/*** 获取指定目录下的所有文件名* * param obj* return*/public sta…

php min命令,php min函数怎么用?

php min函数用于返回一个数组中的最小值&#xff0c;或者几个指定值中的最小值&#xff0c;其语法是min(array_values)&#xff0c;参数array_values必需&#xff0c;指规定一个包含值的数组。php min函数怎么用&#xff1f;定义和用法min() 函数返回一个数组中的最小值&#x…

php协程和goroutine,浅谈协程和Go语言的Goroutine

0x00.前言前面写了一篇今天来学习Go语言的Goroutine机制&#xff0c;这也可能是Go语言最为吸引人的特性了&#xff0c;理解它对于掌握Go语言大有裨益&#xff0c;话不多说开始吧&#xff01;通过本文你将了解到以下内容&#xff1a;什么是协程以及横向对比优势Go语言的Goroutin…