我就废话不多说了,大家还是直接看代码吧!
#coding=utf-8 import threading import time import cx_Oracle from pprint import pprint import csv print time.asctime() table_name = "dbtest.csv" f = open(table_name + ".csv", "w") conn = cx_Oracle.connect('tlcbuser/tlcbuser@20.5.101.31/tlyy') cursor = conn.cursor() def query01(): tname = threading.current_thread() aa=10 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() def query02(): tname = threading.current_thread() aa=20 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() def query03(): tname = threading.current_thread() aa=30 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() def query04(): tname = threading.current_thread() aa=40 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row def query05(): tname = threading.current_thread() aa=50 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() def query06(): tname = threading.current_thread() aa=60 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() def query07(): tname = threading.current_thread() aa=70 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() return row cursor.close() def query08(): tname = threading.current_thread() aa=80 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() def query09(): tname = threading.current_thread() aa=90 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() def query10(): tname = threading.current_thread() aa=100 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() threads = [] t1 = threading.Thread(target=query01, name='query01') threads.append(t1) t2 = threading.Thread(target=query02, name='query02') threads.append(t2) t2 = threading.Thread(target=query03, name='query03') threads.append(t2) t2 = threading.Thread(target=query04, name='query04') threads.append(t2) t2 = threading.Thread(target=query05, name='query05') threads.append(t2) t2 = threading.Thread(target=query06, name='query06') threads.append(t2) t2 = threading.Thread(target=query07, name='query07') threads.append(t2) t2 = threading.Thread(target=query08, name='query08') threads.append(t2) t2 = threading.Thread(target=query09, name='query09') threads.append(t2) t2 = threading.Thread(target=query10, name='query10') threads.append(t2) if __name__ == '__main__': for t in threads: # t.setDaemon(True) t.start() # t.run() # t.start() # print '3333333' print threading.current_thread() # print t.is_alive() # print '3333333' t.join() print "all over " print time.asctime() C:\Python27\python.exe C:/Users/tlcb/PycharmProjects/untitled/a2.py Wed Mar 28 11:08:19 2018 <_MainThread(MainThread, started 18744)> [(10, '10boobook10', '10aaaaaaaaaaaa10', '10bbbbbbbbbbbbbbbbb10'), (10, '10sssssssss10', 'tlcb', 'tlcb'), (10, '10boobook10', '10aaaaaaaaaaaa10', '10bbbbbbbbbbbbbbbbb10')] <_MainThread(MainThread, started 18744)> [(20, '20boobook20', '20aaaaaaaaaaaa20', '20bbbbbbbbbbbbbbbbb20'), (20, '20boobook20', '20aaaaaaaaaaaa20', '20bbbbbbbbbbbbbbbbb20'), (20, '20boobook20', '20aaaaaaaaaaaa20', '20bbbbbbbbbbbbbbbbb20')] <_MainThread(MainThread, started 18744)> [(30, '30boobook30', '30aaaaaaaaaaaa30', '30bbbbbbbbbbbbbbbbb30'), (30, '30boobook30', '30aaaaaaaaaaaa30', '30bbbbbbbbbbbbbbbbb30'), (30, '30boobook30', '30aaaaaaaaaaaa30', '30bbbbbbbbbbbbbbbbb30')] <_MainThread(MainThread, started 18744)> [(40, '40boobook40', '40aaaaaaaaaaaa40', '40bbbbbbbbbbbbbbbbb40'), (40, '40boobook40', '40aaaaaaaaaaaa40', '40bbbbbbbbbbbbbbbbb40'), (40, '40boobook40', '40aaaaaaaaaaaa40', '40bbbbbbbbbbbbbbbbb40')] <_MainThread(MainThread, started 18744)> [(50, '50boobook50', '50aaaaaaaaaaaa50', '50bbbbbbbbbbbbbbbbb50'), (50, '50boobook50', '50aaaaaaaaaaaa50', '50bbbbbbbbbbbbbbbbb50'), (50, '50boobook50', '50aaaaaaaaaaaa50', '50bbbbbbbbbbbbbbbbb50')] <_MainThread(MainThread, started 18744)> [(60, '60boobook60', '60aaaaaaaaaaaa60', '60bbbbbbbbbbbbbbbbb60'), (60, '60boobook60', '60aaaaaaaaaaaa60', '60bbbbbbbbbbbbbbbbb60'), (60, '60boobook60', '60aaaaaaaaaaaa60', '60bbbbbbbbbbbbbbbbb60')] <_MainThread(MainThread, started 18744)> <_MainThread(MainThread, started 18744)> [(80, '80boobook80', '80aaaaaaaaaaaa80', '80bbbbbbbbbbbbbbbbb80'), (80, '80boobook80', '80aaaaaaaaaaaa80', '80bbbbbbbbbbbbbbbbb80'), (80, '80boobook80', '80aaaaaaaaaaaa80', '80bbbbbbbbbbbbbbbbb80')] <_MainThread(MainThread, started 18744)> [(90, '90boobook90', '90aaaaaaaaaaaa90', '90bbbbbbbbbbbbbbbbb90'), (90, '90boobook90', '90aaaaaaaaaaaa90', '90bbbbbbbbbbbbbbbbb90'), (90, '90boobook90', '90aaaaaaaaaaaa90', '90bbbbbbbbbbbbbbbbb90')] <_MainThread(MainThread, started 18744)> [(100, '100boobook100', '100aaaaaaaaaaaa100', '100bbbbbbbbbbbbbbbbb100'), (100, '100boobook100', '100aaaaaaaaaaaa100', '100bbbbbbbbbbbbbbbbb100'), (100, '100boobook100', '100aaaaaaaaaaaa100', '100bbbbbbbbbbbbbbbbb100')] all over Wed Mar 28 11:08:34 2018 Process finished with exit code 0 这个时候是串行 花费了15秒 多线程跑: #coding=utf-8 import threading import time import cx_Oracle from pprint import pprint import csv print time.asctime() table_name = "dbtest.csv" f = open(table_name + ".csv", "w") def query01(): tname = threading.current_thread() aa=10 conn = cx_Oracle.connect('tlcbuser/tlcbuser@20.5.101.31/tlyy') cursor = conn.cursor() # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() conn.close() def query02(): tname = threading.current_thread() aa=20 conn = cx_Oracle.connect('tlcbuser/tlcbuser@20.5.101.31/tlyy') cursor = conn.cursor() # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() conn.close() def query03(): tname = threading.current_thread() aa=30 conn = cx_Oracle.connect('tlcbuser/tlcbuser@20.5.101.31/tlyy') cursor = conn.cursor() # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() conn.close() def query04(): conn = cx_Oracle.connect('tlcbuser/tlcbuser@20.5.101.31/tlyy') cursor = conn.cursor() tname = threading.current_thread() aa=40 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() conn.close() def query05(): conn = cx_Oracle.connect('tlcbuser/tlcbuser@20.5.101.31/tlyy') cursor = conn.cursor() tname = threading.current_thread() aa=50 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() conn.close() def query06(): conn = cx_Oracle.connect('tlcbuser/tlcbuser@20.5.101.31/tlyy') cursor = conn.cursor() tname = threading.current_thread() aa=60 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() conn.close() def query07(): conn = cx_Oracle.connect('tlcbuser/tlcbuser@20.5.101.31/tlyy') cursor = conn.cursor() tname = threading.current_thread() aa=70 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() return row cursor.close() conn.close() def query08(): conn = cx_Oracle.connect('tlcbuser/tlcbuser@20.5.101.31/tlyy') cursor = conn.cursor() tname = threading.current_thread() aa=80 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() conn.close() def query09(): conn = cx_Oracle.connect('tlcbuser/tlcbuser@20.5.101.31/tlyy') cursor = conn.cursor() tname = threading.current_thread() aa=90 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() conn.close() def query10(): conn = cx_Oracle.connect('tlcbuser/tlcbuser@20.5.101.31/tlyy') cursor = conn.cursor() tname = threading.current_thread() aa=100 # cursor.execute("SELECT * FROM TEST100 WHERE ID = %s", [aa]) cursor.prepare("""SELECT * FROM TEST100 WHERE ID=:id""") cursor.execute(None,{'id':aa}) row = cursor.fetchall() print row return row cursor.close() conn.close() threads = [] t1 = threading.Thread(target=query01, name='query01') threads.append(t1) t2 = threading.Thread(target=query02, name='query02') threads.append(t2) t2 = threading.Thread(target=query03, name='query03') threads.append(t2) t2 = threading.Thread(target=query04, name='query04') threads.append(t2) t2 = threading.Thread(target=query05, name='query05') threads.append(t2) t2 = threading.Thread(target=query06, name='query06') threads.append(t2) t2 = threading.Thread(target=query07, name='query07') threads.append(t2) t2 = threading.Thread(target=query08, name='query08') threads.append(t2) t2 = threading.Thread(target=query09, name='query09') threads.append(t2) t2 = threading.Thread(target=query10, name='query10') threads.append(t2) if __name__ == '__main__': for t in threads: # t.setDaemon(True) t.start() # t.run() # t.start() # print '3333333' print threading.current_thread() # print t.is_alive() # print '3333333' t.join() print "all over " print time.asctime() C:\Python27\python.exe C:/Users/tlcb/PycharmProjects/untitled/a2.py Wed Mar 28 11:12:47 2018 <_MainThread(MainThread, started 22500)> <_MainThread(MainThread, started 22500)> <_MainThread(MainThread, started 22500)> <_MainThread(MainThread, started 22500)> <_MainThread(MainThread, started 22500)> <_MainThread(MainThread, started 22500)> <_MainThread(MainThread, started 22500)> <_MainThread(MainThread, started 22500)> <_MainThread(MainThread, started 22500)> <_MainThread(MainThread, started 22500)> [(40, '40boobook40', '40aaaaaaaaaaaa40', '40bbbbbbbbbbbbbbbbb40'), (40, '40boobook40', '40aaaaaaaaaaaa40', '40bbbbbbbbbbbbbbbbb40'), (40, '40boobook40', '40aaaaaaaaaaaa40', '40bbbbbbbbbbbbbbbbb40')] [(60, '60boobook60', '60aaaaaaaaaaaa60', '60bbbbbbbbbbbbbbbbb60'), (60, '60boobook60', '60aaaaaaaaaaaa60', '60bbbbbbbbbbbbbbbbb60'), (60, '60boobook60', '60aaaaaaaaaaaa60', '60bbbbbbbbbbbbbbbbb60')] [(80, '80boobook80', '80aaaaaaaaaaaa80', '80bbbbbbbbbbbbbbbbb80'), (80, '80boobook80', '80aaaaaaaaaaaa80', '80bbbbbbbbbbbbbbbbb80'), (80, '80boobook80', '80aaaaaaaaaaaa80', '80bbbbbbbbbbbbbbbbb80')] [(50, '50boobook50', '50aaaaaaaaaaaa50', '50bbbbbbbbbbbbbbbbb50'), (50, '50boobook50', '50aaaaaaaaaaaa50', '50bbbbbbbbbbbbbbbbb50'), (50, '50boobook50', '50aaaaaaaaaaaa50', '50bbbbbbbbbbbbbbbbb50')] [(10, '10boobook10', '10aaaaaaaaaaaa10', '10bbbbbbbbbbbbbbbbb10'), (10, '10sssssssss10', 'tlcb', 'tlcb'), (10, '10boobook10', '10aaaaaaaaaaaa10', '10bbbbbbbbbbbbbbbbb10')] [(20, '20boobook20', '20aaaaaaaaaaaa20', '20bbbbbbbbbbbbbbbbb20'), (20, '20boobook20', '20aaaaaaaaaaaa20', '20bbbbbbbbbbbbbbbbb20'), (20, '20boobook20', '20aaaaaaaaaaaa20', '20bbbbbbbbbbbbbbbbb20')] [(30, '30boobook30', '30aaaaaaaaaaaa30', '30bbbbbbbbbbbbbbbbb30'), (30, '30boobook30', '30aaaaaaaaaaaa30', '30bbbbbbbbbbbbbbbbb30'), (30, '30boobook30', '30aaaaaaaaaaaa30', '30bbbbbbbbbbbbbbbbb30')] [(100, '100boobook100', '100aaaaaaaaaaaa100', '100bbbbbbbbbbbbbbbbb100'), (100, '100boobook100', '100aaaaaaaaaaaa100', '100bbbbbbbbbbbbbbbbb100'), (100, '100boobook100', '100aaaaaaaaaaaa100', '100bbbbbbbbbbbbbbbbb100')] [(90, '90boobook90', '90aaaaaaaaaaaa90', '90bbbbbbbbbbbbbbbbb90'), (90, '90boobook90', '90aaaaaaaaaaaa90', '90bbbbbbbbbbbbbbbbb90'), (90, '90boobook90', '90aaaaaaaaaaaa90', '90bbbbbbbbbbbbbbbbb90')] all over Wed Mar 28 11:12:55 2018 Process finished with exit code 0 此时花了 8秒
补充知识:python logging定制logstash的json日志格式
最近一直在折腾日志的收集,现在算是收尾了。 写一篇算python优化logstash的方案。
其实大家都知道logstash调用grok来解析日志的话,是要消耗cpu的成本的,毕竟是需要正则的匹配的。
根据logstash调优的方案,咱们可以预先生成json的格式。 我这边基本是python的程序,怎么搞尼 ?
有两种方法,第一种方法是生成json后,直接打入logstash的端口。 还有一种是生成json写入文件,让logstash做tail操作的时候,把一行的日志数据直接载入json就可以了。
python下的日志调试用得时logging,改成json也是很好改得。 另外不少老外已经考虑到这样的需求,已经做了python logstash的模块。
import logging import logstash import sys host = 'localhost' test_logger = logging.getLogger('python-logstash-logger') test_logger.setLevel(logging.INFO) test_logger.addHandler(logstash.LogstashHandler(host, 5959, version=1)) # test_logger.addHandler(logstash.TCPLogstashHandler(host, 5959, version=1)) test_logger.error('python-logstash: test logstash error message.') test_logger.info('python-logstash: test logstash info message.') test_logger.warning('python-logstash: test logstash warning message.') # add extra field to logstash message extra = { 'test_string': 'python version: ' + repr(sys.version_info), 'test_boolean': True, 'test_dict': {'a': 1, 'b': 'c'}, 'test_float': 1.23, 'test_integer': 123, 'test_list': [1, 2, '3'], } test_logger.info('python-logstash: test extra fields', extra=extra)
python-logstash自带了amqp的方案
import logging import logstash # AMQP parameters host = 'localhost' username = 'guest' password= 'guest' exchange = 'logstash.py' # get a logger and set logging level test_logger = logging.getLogger('python-logstash-logger') test_logger.setLevel(logging.INFO) # add the handler test_logger.addHandler(logstash.AMQPLogstashHandler(version=1, host=host, durable=True, username=username, password=password, exchange=exchange)) # log test_logger.error('python-logstash: test logstash error message.') test_logger.info('python-logstash: test logstash info message.') test_logger.warning('python-logstash: test logstash warning message.') try: 1/0 except: test_logger.exception('python-logstash: test logstash exception with stack trace')
不管怎么说,最后生成的格式是这样就可以了。
{ "@source"=>"unknown", "@type"=>"nginx", "@tags"=>[], "@fields"=>{ "remote_addr"=>"192.168.0.1", "remote_user"=>"-", "body_bytes_sent"=>"13988", "request_time"=>"0.122", "status"=>"200", "request"=>"GET /some/url HTTP/1.1", "request_method"=>"GET", "http_referrer"=>"http://www.example.org/some/url", "http_user_agent"=>"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1" }, "@timestamp"=>"2012-08-23T10:49:14+02:00" }
我这里简单提一下,这个模块用的不是很满意,我在python下把日志打成了json字符串,我原本以为会像grok那样,在Es里面,我的这条日志是个字段的结构,而不是这个日志都在message里面…. 我想大家应该明白了我的意思,这样很是不容易在kibana的搜索…
在kibana搜索,我经常上 source:xxx AND level:INFO 结果正像上面描述的那样,整条日志,都在@message里面。
以上这篇python 串行执行和并行执行实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
python,串行执行,并行执行
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]