python核心编程学习笔记-2016-08-28-01-习题18-4和习题18-9

        习题18-4

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

import threading
import time

char = chr(input("Enter a positive number from 0 to 255: "))
filename = raw_input("Enter a filename: ")

print "*** Single Thread"
count = 0
time_start = time.clock()
with open(filename, 'r') as f:
    for eachLine in f:
        if eachLine == bin(ord(char)) + '\n':
            count += 1
f.close()
time_end = time.clock()
print "%s occur %d time in %s." % (char, count, filename)
print "using", (time_end - time_start), 's'

print "*** Multiple Threads"

counts = []
threadNum = int(raw_input("Enter the number of threads: "))
def read(char, text):
    count = 0
    for eachLine in text:
        if eachLine == bin(ord(char)) + '\n':
            count += 1
    counts.append(count)

time_start = time.clock()
with open(filename, 'r') as f:
    text = f.readlines()
    lines = len(text) / threadNum
    threads = []
    for i in range(threadNum):
        if (i + 1) * (len(text) / threadNum) <= len(text):
            t = threading.Thread(target=read, args=(char, text[(i * lines):((i + 1) * lines)])) # 将文件分块,不同线程分别读取。
        else:
            t = threading.Thread(target=read, args=(char, text[(i * lines):]))
        threads.append(t)
        threads[i].start()

    for i in range(threadNum): 
        threads[i].join()
f.close()
count = sum(counts)
time_end = time.clock()
print "%s occur %d time in %s." % (char, count, filename)
print "using", (time_end - time_start), 's'        

         但是看结果



        习题18-9

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

import threading
import time

filenames = ['ex9-19.txt', 'ex9-19.txt', 'ex9-19.txt', 'ex9-19.txt', 'ex9-19.txt']
sin_counts = []
mul_counts = []
def countline(filename, counts):
    f = open(filename, 'r')
    count = 0
    for eachLine in f:
        count += 1
    counts.append(count)

print "*** Single thread"
time_start = time.clock()
for i in range(len(filenames)):
    countline(filenames[i], sin_counts)
time_end = time.clock()
print sin_counts
print time_end - time_start

print "*** Multiply threads"
time_start = time.clock()
threads = []
for i in range(len(filenames)):
    t = threading.Thread(target=countline, args=(filenames[i], mul_counts))
    threads.append(t)

for i in range(len(filenames)):
    threads[i].start()

for i in range(len(filenames)):
    threads[i].join()

time_end = time.clock()
print mul_counts
print time_end - time_start
        结果



        单线程比多线程还要快。这个可能是由于这两个程序都是计算密集型的原因吧。具体原因暂时存疑吧,等到具备操作系统的基本知识后,或许就会明白了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值