Python-多執行緒與平行計算
阿新 • • 發佈:2019-01-26
多執行緒列印1-100import threading from math import ceil result = 0 def sub_sum(start, end, step): global result sum = float(0) temp = start while temp < end + step / 1000000: sum += temp temp += step #print("sum from %f to %f by the step %f is %f"\ # % (start, end, step, sum)) result += sum def thread_sum(start, end, step = 1, num_thread = 1): global result num_threads = int(num_thread) if (num_threads <= 0): num_threads = 1 end = start + int((end - start)/step) * step numbers = end - start if (numbers < 0 and step > 0) or (numbers > 0 and step < 0): print("error in sum: from %f to %f by the step %f is invalid."\ % (start, end, step)) return 0 elif numbers == 0: return start if numbers < 0: (start, end, step) = (end, start, -step) numbers *= -1 d = ceil(numbers / num_thread / step) * step if d < step: d = step begin = 0 threads = [] while start + begin * d < end: threads.append(threading.Thread(target=sub_sum,\ args=(start + d * begin,\ start + d * (begin + 1) - step \ if start + (begin + 1) * d < end else end,\ step))) begin += 1 print("Actual threads count: %d" % len(threads)) for i in range(len(threads)): threads[i].start() for i in range(len(threads)): threads[i].join() return result if __name__ == "__main__": start = raw_input("Please input the start: ") end = raw_input("Please input the end: ") step = raw_input("Please input the step(default 1): ") start = float(start) end = float(end) step = 1 if step == "" else float(step) num_thread = raw_input("Please input the num of threads: ") num_thread = int(num_thread) if num_thread < 0: print("The num_thread must be positive but not %d" % num_thread) exit(0) print("Ths sum is: %f" % thread_sum(start, end, step, num_thread)) s = 0 if start < end and step > 0: while start <= end: s += start start += step elif start > end and step < 0: while start >= end: s += start start += step print("normal function: %s" % s)