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.pswp.cn/news/443599.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443599.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443599.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Tomcat6.0.37,tomcat6.0.37,下訪問Web項目,jsp項目不需要輸入項目名稱和端口號的配置方法...

1.不需要數據項目名稱就可以訪問項目的配置方法如下&#xff1a; 首先到你的Tomcat下的conf文件夾下找到server.xml文件&#xff0c;打開后修改為&#xff1a; <Host name"localhost" appBase"webapps"unpackWARs"true" autoDeploy"tru…

java合并list_java合并list方法代碼實例

這篇文章主要介紹了java合并list方法代碼實例,文中通過示例代碼介紹的非常詳細&#xff0c;對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下List包括List接口以及List接口的所有實現類。因為List接口實現了Collection接口&#xff0c;所以List接口擁有Collec…

java math 函數_Java中Math類常用函數總結

Java中比較常用的幾個數學公式的總結&#xff1a;//取整&#xff0c;返回小于目標函數的最大整數,如下將會返回-2Math.floor(-1.8)&#xff1b;//取整&#xff0c;返回發育目標數的最小整數Math.ceil()//四舍五入取整Math.round()//計算平方根Math.sqrt()//計算立方根Math.cbrt…

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…

java上傳png_java上傳png圖片出現紅色背景

java圖片上傳出現紅色背景java圖片服務器上傳圖片都很正常&#xff0c;唯獨上傳png圖片時&#xff0c;png圖片變成紅色背景原因是讀取上傳數據時用的是ImageIO.read(inputstream)方法public static BufferedImage getImages(byte[] data) throws IOException {ByteArrayInputSt…

java 引用隊列_Java中管理資源的引用隊列相關原理解析

當對象改變其可達性狀態時&#xff0c;對該對象的引用就可能會被置于引用隊列(reference queue)中。這些隊列被垃圾回收器用來與我們的代碼溝通有關對象可達性變化的情況。這些隊列是探測可達性變化的最佳方式&#xff0c;盡管我們也可以通過檢查get方法的返回值是不是null來探…

Tomcat 替換項目圖標

1.首先制作一個32*32像素的圖標&#xff0c;命名為favicon.ico這里名稱必須是和Tomcat的webapps下的ROOT下的一樣。 2.把制作好的圖標放到你要部署的Web項目的images目錄下&#xff0c;如果你的Web項目有過濾器等&#xff0c;要給后綴名為.ico的圖標放行。 3.最后你就可以在你需…

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寫一個日歷_使用JAVA寫一個簡單的日歷

JAVA寫一個簡單的日歷import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Scanner;/*** 制作一個簡單的日歷** author 這…

MySQL定時任務event,儲存過程(定時刪除指定時間前90天指定表的數據)

<span style"font-family: Microsoft YaHei; font-size: 14px;">MySQL定時任務event</span> 由于一些業務需求&#xff0c;我們可能需要定時清除數據庫一些廢棄的數據&#xff0c;可以使用mysql的存儲過程和事件來完成。 下面例子定時清除日志表tbl_base…

python慢為什么用的人還很多_為什么是所有人比python標準慢得多嗎?

通過使用生成器理解而不是列表理解&#xff0c;可以使這兩個函數更快、更具可比性。在s """import numpy as np;x, y np.random.rand(1000),np.random.rand(1000);(all((x[i], y[i])) for i in range(1000)) """timeit.timeit(s,number1000)0.…

Java規定構造方法和類名相同_不是說:java構造方法和類名一定要相同嗎?為什么我看見很多構造方法跟類名不完全一致啊?隱藏了什么嗎?...

比如以下代碼。類名不是TestCar_EX才對嗎&#xff1f;為什么構造方法名卻是Car&#xff1f;我看見很多教程都是這么寫的。暈。。。。。。。。。。。到底怎么樣才是對的啊&#xff1f;public class TestCar_EX {public static void main(String[] args) {Car c1 new Car("…

java pdf stamper_PDFStamper在幾個PDF文件上失敗(itext 5.5.1)

我嘗試使用數據填充PDF表單并獲得PDFStamper(itext版本5.5.1)以處理多個PDF文件&#xff0c;但在某些情況下它總是失敗。示例代碼&#xff1a;PdfReader reader new PdfReader(new FileInputStream("C:/Temp/source.pdf"));PdfStamper stamper new PdfStamper(read…

用獵物皮毛換酒喝java_荒野大鏢客2三星毛皮狩獵技巧分享 各種類獵物三星皮毛獲取方法...

荒野大鏢客2三星毛皮怎么獲得&#xff1f;想必很多朋友都還不是很清楚吧&#xff0c;所以呢小編今天給大家帶來的就是荒野大鏢客2三星毛皮狩獵技巧分享&#xff0c;需要的朋友還不快進來看看&#xff1f;三星毛皮狩獵技巧分享獵物體型分水嶺建議以狐貍類為例。(1)中型獵物[比狐…