我想我已经找到了C#和Ruby可以做的东西,但Python不能
在C#中:
for (var i = 0; i < 100; i++)
new Thread(() => { Console.Write(i+" "); }).Start();
Console.ReadLine();
在Ruby中:
for i in 0...100
Thread.start{
print i + ''
}
end
gets
有任何想法吗?你能在python中重写上面的代码吗?输出应该类似于C#和Ruby:具有重复的数字.
编辑
输出是100次打印,重复数字.如果您定义一个类或一个新方法,您只能获得100次打印而没有重复的数字.我知道获取重复数字是没有意义的,我只想使用python实现与C#和ruby相同的效果.
C#的示例输出:
3 3 3 3 5 7 8 8 10 10 12 12 13 14 17 17 17 18 20 20 22 23 24 24 25 28 28 29 29 3
1 31 33 33 34 36 38 38 38 41 41 41 42 44 45 45 46 49 49 50 50 52 52 55 56 56 56
58 59 59 60 61 64 64 64 66 66 67 68 69 72 72 72 73 74 76 76 78 78 81 81 82 83 84
84 86 86 87 89 89 90 93 94 94 95 95 97 97 99 99 100
Ruby的示例输出:
99999999999999999999999999999999999999999999999999999999999999999999999999999999
99999999999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999
为什么我想要重复的数字:
C#和ruby代码的输出有重复的数字.那是因为,主线程正在改变i的值,因此一些子线程可能会打印相同的数字.主线程和子线程引用相同的变量i.
有时这很有用:主线程更改变量,子线程全部获取更新变量.
但是我们怎么能用Python做到这一点?
解决方法:
如果你希望不同的线程有时看到i的相同值,那么你需要传入一个可变对象并改变它:
import threading
def action(arg):
print arg[0],
mutable = [0]
for i in range(100):
mutable[0] = i
threading.Thread(target=action, args=(mutable,)).start()
这与您是否为线程定义单独的类没有任何关系,它完全取决于您如何在线程之间共享值.全局变量会以同样的方式破坏您的线程.
样本输出:
0 1 2 3 5 5 6 8 9 9 11 11 12 1314 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3
0 31 32 33 34 35 36 37 39 39 40 41 43 44 44 45 46 47 48 49 50 51 53 53 54 55 56
5758 59 60 61 62 64 65 6666 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 8
4 85 86 87 89 90 90 92 93 93 94 95 96 9898 99
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。