【发布时间】:2011-10-13 09:55:44
【问题描述】:
我想我找到了一些 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 中做到这一点呢?
【问题讨论】:
-
扩展线程。线程听起来比其他的设计模式更好。它封装得很好,而且非常干净。
-
重复数字是什么意思?你的意思是你得到“1” 100 次,然后是“2” 100 次,等等还是什么?
-
@agf,我将 WriteLine(i) 更改为 Write(i+" ")。 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 4 2 45 45 46 49 49 50 50 52 52 55 56 56 52 52 59 56 56 56 52 52 59 56 68 69 72 72 72 73 74 76 76 72 78 81 81 82 83 84 84 86 86 87 89 89 90 93 94 94 95 95 97 97 99 99 100。
标签: c# python ruby multithreading closures