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

原创 2016年08月28日 14:39:56

        习题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
        结果



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

版权声明:本文为博主原创文章,未经博主允许不得转载。

《Python核心编程》第11章 习题

11-2 函数。结合你对练习5-2的解,以便你创建一个带一对相同数字并同时返回它们之和以及产物的结合函数。 fun=lambda x,y:x+y print fun(1,3) 11-3 函数...
  • birdzb
  • birdzb
  • 2016年01月22日 16:15
  • 2832

《Python核心编程》第7章 习题

7–3. 字典和列表的方法。 (a) 创建一个字典,并把这个字典中的键按照字母顺序显示出来。 (b) 现在根据已按照字母顺序排序好的键,显示出这个字典中的键和值。 (c)同(b),但这次是根据已按照字...
  • birdzb
  • birdzb
  • 2015年09月09日 23:13
  • 3283

《Python核心编程 》笔记-快速入门

春节终于over了,回归充实的学习研究生活。打开久违的CSDN博客,看到官方推送的 『博客Markdown编辑器上线啦』,让我顿时有了写作的欲望,真是程序员的福利。之前阅读各种文章书籍,都是用Mark...
  • u012162613
  • u012162613
  • 2015年02月27日 11:17
  • 1950

python核心编程学习笔记-2016-08-28-02-习题18-6

习题18-6 服务器 #-*-coding: utf-8-*- # 参考网上的思路,服务器端主线程仍然是监视连接,新建两个线程,一个用来接收信息,另外一个用来接收信息。 from socket i...
  • baidu_21088863
  • baidu_21088863
  • 2016年08月28日 16:11
  • 303

python核心编程学习笔记-2016-07-28-01-习题6-16

习题6-16 #-*-coding: utf-8-*- import sys def getInput(): while True: try: li...
  • baidu_21088863
  • baidu_21088863
  • 2016年07月28日 21:18
  • 180

python核心编程学习笔记-2016-07-23-01-习题5-6

习题5-6 简单计算器 代码如下: #-*-coding: utf-8-*- # 计算器 # 根据输入结果进行计算 def cal(expr): L = expr.split() ...
  • baidu_21088863
  • baidu_21088863
  • 2016年07月23日 00:38
  • 189

python核心编程学习笔记-2016-07-30-01-习题7-5

习题7-5,登陆系统。 代码: #-*-coding: utf-8-*- # 图形界面等到学完Tkinter之后再完善 import time, msvcrt, sys db = {} user...
  • baidu_21088863
  • baidu_21088863
  • 2016年07月30日 12:21
  • 170

python核心编程学习笔记-2016-07-26-01-习题6-13

习题6-13 将复数字符串转变成复数,由例子'-1.23e+4-5.67j',要考虑用科学计数法表示数字的情况。 代码如下: #-*-coding: utf-8-*- import string n...
  • baidu_21088863
  • baidu_21088863
  • 2016年07月26日 21:38
  • 173

python核心编程学习笔记-2016-08-06-01-装饰器

装饰器 语法: @decorator(dec_opt_args) def func2Bdecorated(func_opt_args): : 其等价于 def func2Bdecorate...
  • baidu_21088863
  • baidu_21088863
  • 2016年08月06日 19:20
  • 160

python核心编程学习笔记-2016-08-16-01-可调用对象

可调用对象         定义为任何能通过函数操作符“()“来调用的对象,还可以通过函数式编程接口来调用,如apply(),filter(),map()和reduce()等。         pyt...
  • baidu_21088863
  • baidu_21088863
  • 2016年08月16日 19:21
  • 191
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python核心编程学习笔记-2016-08-28-01-习题18-4和习题18-9
举报原因:
原因补充:

(最多只允许输入30个字)