当我运行这个程序时,它告诉我“NameError:name'thread'is not defined”我该怎么办?

2024-04-26 04:44:34 发布

您现在位置:Python中文网/ 问答频道 /正文

•假设您有一个包含500000个元素的数组(data=[]),并且每个元素都被分配了一个介于1到10之间的随机值(随机.randint(1,10))。在

对于范围内的i(500000): 数据[i]=随机.randint()

•允许用户确定工作线程的数量(N)。用户可以输入1到10之间的值。无效值应导致警告消息,线程计数设置为5。 •找出一种自动将数组划分为N个相等的段的方法,其中N是工作线程的数量(threadCount)。您不能创建子数组来处理这个问题;您必须找到一种基于索引对原始数组进行分区的方法。下面提供了一个提示,假设用户输入的threadCount为4。在

第1段 (125000个元素)第2段 (125000个元素)第3段 (125000个元素)第4段 (125000个元素)

•确定一种生成线程的方法,以便为每个线程分配一个数组段进行操作。这些线程应该为其分配的段创建元素的总和。单线程功能如下:

定义求和(st、end、threadIndex):

其中:st和end表示数组段的起点和终点,index是线程数。在

必须确定锁定机制,以确保程序可以在阵列上并发运行。在

•每个线程完成其工作后,主程序应通过将子和相加并除以数组元素的总数来计算最终平均值。在

最后练习: 你能扩展你的程序,使数组用你的工作线程填充随机数吗?在

我的代码:

import random
import thread
def su(st,end,i):
    global subtotal, data, locks
    for index in range(st,end+i):
        subtotal[i] += data[index]
    lock.release()

numth = int(100)

data = list(range(numth))

for index in range(len(data)):
    data[index] = random.randint(1,10)

wt=int(input("enter"))

locks = list(range(wt))

subtotal = list(range(wt))

seg = len(data)/wt

st=0

for i in range(wt):
    st= i * seg
    end = st *seg -1
    thread.start_new_thread(su, ())
    locks=lock.acquire()
avg = sum(subtotal)/len(data)

print(avg)

Tags: 方法用户元素dataindexrange数组线程
1条回答
网友
1楼 · 发布于 2024-04-26 04:44:34

您导入的是_thread,而不是{},请删除下划线。删除_thread.start_new_thread()行中的下划线。在

一般来说,不要使用以下划线开头的模块,它们是内部实现细节。在

相关问题 更多 >

    热门问题