Python学习--threading应用和socket应用

Python学习–threading应用和socket应用
代码示例:

#!/usr/bin/python

import threading
import random
from time import ctime, time, sleep
from socket import *

#TCP info
HOST = '10.1.252.95'
PORT = 6688
ADDR = (HOST, PORT)

BUFFSIZE = 1024

#thread numbers
THREAD_NUMS = 10

#send frequency
SEND_FREQ = 10000

#send info 
send_info_list = ['CidUserQuery {1001} {ME60-X16-ZJZ01-63201001000000@iptv} {}', 
                  'CidUserQuery4NAT {1001} {} {60.11.69.53} {}  {} ', 
                  'CidUserQuery {1002} {} {10.1.224.3}',
                  'CidUserQuery {1002} {} {10.1.224.4}',
                  'CidUserQuery {1002}  {10.1.224.5}',
                  'CidUserQuery {1002} {10.1.224.5}',
                  'CiUserQuery {1002} {} {10.1.224.5}']

#work thread class
class WorkThread(threading.Thread):
    def __init__(self, func, args, name):
        threading.Thread.__init__(self)
        self.func = func
        self.args = args
        self.name = name
        self.res = None

    #get result
    def get_result(self):
        return self.res

    #run thread
    def run(self):
        print 'run loop start at:\n', ctime()
        self.res = apply(self.func, self.args)
        print 'run loop end at:\n', ctime()


#thread call-back function
def thread_func(thread_name):
    print '%s begin.\n' % thread_name
    #sleep(random.random()*1000)
    com_with_server(thread_name)
    print '%s end.\n' % thread_name

#init thread and run 
def run_thread():
    start_time = time()
    print __name__, ' Start at:\n', ctime()
    #thread pool
    threads = []
    #create work thread
    thread_nums = range(0, THREAD_NUMS)
    for i in thread_nums:
        thread_name = 'Thread[%d]' % i
        t = WorkThread(thread_func, (thread_name,), thread_func.__name__)
        threads.append(t)

    #run threads
    for i in thread_nums:
        threads[i].start()

    #wait thread end
    for i in thread_nums:
        threads[i].join()

    print __name__, ' End at:\n', ctime()
    end_time = time()
    print 'cost time:\n', (end_time - start_time)

#communicate with tcp server
def com_with_server(thread_name):
    for i in range(0, SEND_FREQ):
        try:
            #create client socket
            cli_sock = socket(AF_INET, SOCK_STREAM)
            #connect server
            cli_sock.connect(ADDR)
            #print '----2----\n'

            #sleep(random.random()*10)
            count = random.randint(0, len(send_info_list)-1)
            data = send_info_list[count]
            send_data = '%04d%s' % (len(data), data)
            print '%s send:[%s]\n' % (thread_name, send_data)

            #send info 
            cli_sock.send(send_data)

            #receive info
            recv_data = cli_sock.recv(BUFFSIZE)
            print '%s recv:[%s]\n' % (thread_name, recv_data)
            cli_sock.close()
        except Exception, e:
            print 'Error:%s\n' % e
            cli_sock.close()

#main 
if  __name__ == '__main__':
    print 'main begin\n'
    run_thread()
    print 'main end\n'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值