کانال

ساخت وبلاگ

NextFlow بر اساس مدل برنامه نویسی DataFlow است که در آن فرآیندها از طریق کانال ها ارتباط برقرار می کنند.

یک کانال دارای دو ویژگی اصلی است:

  1. ارسال پیام یک عمل ناهمزمان است که بلافاصله تکمیل می شود ، بدون اینکه منتظر روند دریافت باشید.
  2. دریافت داده ها یک عمل مسدود کننده است که تا زمان رسیدن پیام ، روند دریافت را متوقف می کند.

انواع کانال

در NextFlow دو نوع کانال وجود دارد: کانال های صف و کانال های ارزش.

کانال صف

یک کانال صف یک صف FIFO یک طرفه غیر مسدود کننده است که دو فرآیند ، کارخانه های کانال یا اپراتور را به هم متصل می کند.

یک کانال صف معمولاً با استفاده از یک روش کارخانه (_chael-of ، _chael-path و غیره) ایجاد می شود یا آن را با یک اپراتور کانال (نقشه ، مسطح و غیره) زنجیر می کند. کانال های صف نیز با اعلامیه خروجی فرآیند ایجاد می شوند.

کانال ارزش

یک کانال با ارزش A. K. A. کانال Singleton به یک مقدار واحد محدود می شود و بدون مصرف محتوای آن ، می توانید تعداد نامحدودی را بخوانید.

یک کانال ارزش با استفاده از روش کارخانه Value یا توسط اپراتورهایی که یک مقدار واحد را برمی گردانند ، مانند اول ، آخرین ، جمع آوری ، شمارش ، حداقل ، حداکثر ، کاهش ، جمع و غیره.

هنگامی که با یک مقدار ساده فراخوانی می شود ، یک کانال ارزش به طور ضمنی توسط یک فرآیند ایجاد می شود. علاوه بر این ، یک کانال ارزش نیز به طور ضمنی به عنوان خروجی برای فرآیندی که ورودی های آن همه کانال های ارزش هستند ایجاد می شود.

روند فحش  ورودی: دره x خروجی: مسیر 'x. txt' """ echo $x>x. txt """ > جریان کار  نتیجه = فحش(1) نتیجه.چشم انداز  "نتیجه: $ " > > 

در مثال بالا ، از آنجا که فرآیند FOO به جای یک کانال با یک مقدار ساده فراخوانی می شود ، ورودی به طور ضمنی به یک کانال ارزش تبدیل می شود و خروجی نیز به عنوان یک کانال ارزش ارائه می شود.

کارخانه کانال

کانال ها ممکن است صریحاً با استفاده از روشهای کارخانه کانال زیر ایجاد شوند.

از نسخه 20. 07. 0 ، کانال به عنوان نام مستعار کانال معرفی شده است ، بنابراین روش های کارخانه را می توان به صورت کانال . of () یا کانال . of () و غیره مشخص کرد.

ایجاد کردن

روش ایجاد دیگر در نحو DSL2 در دسترس نیست.

همانطور که در زیر نشان داده شده است ، یک کانال جدید ایجاد می کند:

کانال = کانال.ايجاد كردن() 

خالی

روش کارخانه خالی ، با تعریف ، کانال ایجاد می کند که هیچ ارزشی را منتشر نمی کند.

همچنین ببینید: اپراتورهای IFEMPTY و نزدیک.

از

این روش مستهلک می شود. به جای آن از لیست استفاده کنید.

روش FROM به شما امکان می دهد تا یک دنباله از مقادیر را که به عنوان آرگومان روش مشخص شده است ، ایجاد کنید: به عنوان مثال:

ch = کانال.از جانب( 1, 3, 5, 7 ) ch.اشتراک در  چاپل "ارزش: $ it" > 

خط اول در این مثال یک متغیر CH را ایجاد می کند که یک شیء کانال را در خود جای داده است. این کانال مقادیر مشخص شده به عنوان یک پارامتر را در روش FROM منتشر می کند. بنابراین خط دوم موارد زیر را چاپ می کند:

ارزش: 1 ارزش: 3 ارزش: 5 ارزش: 7 

مثال زیر نحوه ایجاد یک کانال از طیف وسیعی از اعداد یا رشته ها را نشان می دهد:

زراعین = کانال.از جانب( 0..9 ) رشته های = کانال.از جانب( 'آ'..'z' ) 

هنگامی که آرگومان از یک شیء است که رابط مجموعه (جاوا) را اجرا می کند ، کانال حاصل ورودی های مجموعه را به عنوان موارد جداگانه منتشر می کند.

بنابراین دو اعلامیه زیر نتیجه یکسان را ایجاد می کنند ، حتی اگر در مورد اول موارد به عنوان آرگومان های متعدد مشخص شوند در حالی که در مورد دوم به عنوان یک آرگومان شیء لیست واحد:

کانال.از جانب( 1, 3, 5, 7, 9 ) کانال.از جانب( [1, 3, 5, 7, 9] ) 

اما هنگامی که بیش از یک استدلال ارائه می شود ، آنها همیشه به عنوان انتشار گازهای تک نفره اداره می شوند. بنابراین ، مثال زیر یک کانال ایجاد می کند که سه مدخل را منتشر می کند که هر یک از آنها لیستی حاوی دو عنصر است:

کانال.از جانب( [1, 2], [5,6], [7,9] ) 

از لیست

این ویژگی به نسخه NextFlow 19. 10. 0 یا بعد از آن نیاز دارد.

روش FromList به شما امکان می دهد تا یک کانال را منتشر کنید که مقادیر ارائه شده به عنوان لیستی از عناصر را منتشر کند ، به عنوان مثال:

کانال .از لیست( ['آ', "ب", 'ج', 'D'] ) .چشم انداز  "ارزش: $ it" > 
ارزش: a ارزش: b ارزش: c ارزش: d 

همچنین ببینید: از روش کارخانه.

هم چیز

می توانید با استفاده از روش FROPAPT و مشخص کردن یک رشته مسیر به عنوان یک آرگومان ، یک کانال را منتشر کنید که یک یا چند مسیر فایل را منتشر کند. مثلا:

MyFileChael = کانال.هم چیز( '/data/some/bigfile. txt' ) 

خط فوق یک کانال ایجاد می کند و آن را به یک شیء مسیر برای پرونده مشخص شده متصل می کند.

FromPath بررسی نمی کند که آیا پرونده وجود دارد یا خیر.

هر زمان که استدلال FromPath حاوی * یا؟شخصیت Wildcard آن را به عنوان یک مسابقه Glob Path تعبیر می کند. مثلا:

MyFileChael = کانال.هم چیز( '/data/big/*. txt' ) 

این مثال یک کانال ایجاد می کند و به عنوان بسیاری از موارد مسیر ساطع می شود زیرا پرونده هایی با پسوند txt در پوشه /داده /بزرگ وجود دارد.

دو ستاره ، یعنی ** ، مانند * کار می کند اما از مرزهای دایرکتوری عبور می کند. این نحو به طور کلی برای تطبیق مسیرهای کامل استفاده می شود. براکت های فرفری مجموعه ای از الگوی زیر را مشخص می کنند.

فایل ها = کانال.هم چیز( "داده ها/**. fa" ) بیشتر = کانال.هم چیز( "داده/**/*. fa" ) جفت = کانال.هم چیز( "data/file_. fq" ) 

خط اول یک کانال منتشر می کند که پرونده های پایان یافته با پسوند . FA را در پوشه داده و به صورت بازگشتی در تمام زیرزمین های خود باز می گرداند. در حالی که مورد دوم فقط پرونده هایی را منتشر می کند که در هر زیر کف در مسیر داده ، پسوند یکسانی دارند. سرانجام آخرین مثال دو پرونده را منتشر می کند: data/file_1. fq و data/file_2. fq.

همانطور که در Linux Bash ، * Wildcard پرونده های پنهان را نمی گیرد (یعنی پرونده هایی که نام آنها با یک شخصیت شروع می شود).

برای درج پرونده های پنهان ، باید الگوی خود را با یک شخصیت دوره شروع کنید یا گزینه Hidden: True را مشخص کنید. مثلا:

usp1 = کانال.هم چیز( '/مسیر/.*' ) usp2 = کانال.هم چیز( '/path/. m. fa' ) 33 = کانال.هم چیز( '/مسیر/*', پنهان: درست است، واقعی ) 

مثال اول تمام پرونده های پنهان را در مسیر مشخص شده برمی گرداند. مورد دوم همه پرونده های پنهان را که با پسوند . FA پایان می یابد ، برمی گرداند. سرانجام آخرین مثال همه پرونده ها (پنهان و غیر پنهان) را در آن مسیر برمی گرداند.

به طور پیش فرض ، یک الگوی GLOB فقط به دنبال مسیرهای پرونده معمولی است که با معیارهای مشخص شده مطابقت داشته باشد ، یعنی مسیرهای دایرکتوری را بر نمی گرداند.

شما می توانید از نوع پارامتر مشخص کنید که فایل مقدار ، DIR یا هر یک را مشخص کنید تا تعریف کنید که چه نوع مسیرهایی را می خواهید. مثلا:

MyFileChael = کانال.هم چیز( '/مسیر/*B', نوع: "دیر" ) MyFileChael = کانال.هم چیز( '/مسیر/a*', نوع: "هر" ) 

مثال اول تمام مسیرهای دایرکتوری را که با پسوند B پایان می یابد ، باز می گرداند ، در حالی که دوم هر پرونده و دایرکتوری را با پیشوند A شروع می کند.

وقتی واقعی شخصیت ها را تفسیر می کند * ،؟، [] و<>به عنوان کارتهای وحشی Glob ، در غیر این صورت آنها را به عنوان شخصیت های عادی کنترل می کند (پیش فرض: درست)

نوع مسیرهای برگشتی ، یا پرونده ، DIR یا هر نوع (پیش فرض: پرونده)

هنگامی که true شامل پرونده های پنهان در مسیرهای حاصل (پیش فرض: false)

حداکثر تعداد دایرکتوری برای بازدید (پیش فرض: بدون محدودیت)

هنگامی که درست از پیوندهای نمادین در طول دایرکتوری ها عبور می کند ، در غیر این صورت آنها به عنوان پرونده ها مدیریت می شوند (پیش فرض: درست)

هنگامی که مسیرهای برگشتی واقعی نسبت به دایرکتوری برتر برتر (پیش فرض: نادرست) است

هنگامی که واقعی به استثنای مسیر مشخص شده در سیستم پرونده وجود ندارد (پیش فرض: نادرست)

چندین مسیر یا الگوهای گلوب را می توان با استفاده از یک لیست مشخص کرد:

کانال.هم چیز( ['/some/path/*. fq', '/other/path/*. fastq'] ) 

از Filepairsuf0c1

روش FROMFILEPAIR یک کانال ایجاد می کند که جفت پرونده ها را با الگوی جهانی ارائه شده توسط کاربر تهیه می کند. پرونده های تطبیق به عنوان Tuples منتشر می شوند که در آن عنصر اول کلید گروه بندی جفت تطبیق است و عنصر دوم لیست پرونده ها است (مرتب شده به ترتیب واژگونی). مثلا:

کانال .از صندلی های('/my/data/srrpl_. fastq') .چشم انداز() 

این خروجی مشابه موارد زیر را تولید می کند:

[SRR493366, [/my/داده ها/SRR493366_1.سریع, /my/داده ها/SRR493366_2.سریع]] [SRR493367, [/my/داده ها/SRR493367_1.سریع, /my/داده ها/SRR493367_2.سریع]] [SRR493368, [/my/داده ها/SRR493368_1.سریع, /my/داده ها/SRR493368_2.سریع]] [SRR493369, [/my/داده ها/SRR493369_1.سریع, /my/داده ها/SRR493369_2.سریع]] [SRR493370, [/my/داده ها/SRR493370_1.سریع, /my/داده ها/SRR493370_2.سریع]] [SRR493371, [/my/داده ها/SRR493371_1.سریع, /my/داده ها/SRR493371_2.سریع]] 

الگوی گلوب باید حداقل یک شخصیت کارت وحشی داشته باشد.

از طرف دیگر می توان یک استراتژی گروه بندی جفت فایل سفارشی را ارائه داد که بسته بندی را ارائه می دهد که با توجه به پرونده فعلی به عنوان پارامتر ، کلید گروه بندی را برمی گرداند. مثلا:

کانال .از صندلی های('/برخی/داده ها/*', اندازه: -1)  فایل > فایل.افزونه > .چشم انداز  خارج کردن, فایل ها > "پرونده هایی با پسوند $ ext پرونده های $" > 

جدول پارامترهای اختیاری موجود:

نوع مسیرهای برگشتی ، یا پرونده ، DIR یا هر نوع (پیش فرض: پرونده)

هنگامی که true شامل پرونده های پنهان در مسیرهای حاصل (پیش فرض: false)

حداکثر تعداد دایرکتوری برای بازدید (پیش فرض: بدون محدودیت)

هنگامی که درست از پیوندهای نمادین در طول دایرکتوری ها عبور می کند ، در غیر این صورت آنها به عنوان پرونده ها مدیریت می شوند (پیش فرض: درست)

انتظار می رود تعداد پرونده هایی که هر مورد منتشر شده در آن نگه داشته می شود (پیش فرض: 2). برای هر یک تنظیم کنید.

هنگامی که درست باشد ، پرونده های تطبیق به عنوان تنها عناصر در Tuples منتشر شده تولید می شوند (پیش فرض: نادرست).

هنگامی که واقعی به استثنای مسیر مشخص شده در سیستم پرونده وجود ندارد (پیش فرض: نادرست)

الگوهای چند کره را می توان با استفاده از لیست مشخص کرد:

کانال.از صندلی های( ['/some/data/srrpl_. fastq', '/other/data/qff*_. fastq'] ) 

فریسرا

این ویژگی به نسخه NextFlow 19. 04. 0 یا بعد از آن نیاز دارد.

روش FORSSRA از پایگاه داده NCBI SRA پرس و جو می کند و کانال منتشر می کند که فایلهای FASTQ را مطابق با معیارهای مشخص شده یعنی پروژه یا شماره (شماره) ارائه می دهد. مثلا:

کانال .فری('SRP043510') .چشم انداز() 
[SRR1448794, FTP://FTP.SRA.ابو.ac.uk/جلد 1/سریع/SRR144/004/SRR1448794/SRR1448794.سریع.gz] [SRR1448795, FTP://FTP.SRA.ابو.ac.uk/جلد 1/سریع/SRR144/005/SRR1448795/SRR1448795.سریع.gz] [SRR1448792, FTP://FTP.SRA.ابو.ac.uk/جلد 1/سریع/SRR144/002/SRR1448792/SRR1448792.سریع.gz] [SRR1448793, FTP://FTP.SRA.ابو.ac.uk/جلد 1/سریع/SRR144/003/SRR1448793/SRR1448793.سریع.gz] [SRR1910483, FTP://FTP.SRA.ابو.ac.uk/جلد 1/سریع/SRR191/003/SRR1910483/SRR1910483.سریع.gz] [SRR1910482, FTP://FTP.SRA.ابو.ac.uk/جلد 1/سریع/SRR191/002/SRR1910482/SRR1910482.سریع.gz] (باقی مانده ناپدید شده) 

شناسه های الحاق چندگانه را می توان با استفاده از یک شیء لیست مشخص کرد:

شناسه = ['ERR908507', 'ERR908506', 'ERR908505'] کانال .فری(شناسه) .چشم انداز() 
[ERR908507, [FTP://FTP.SRA.ابو.ac.uk/جلد 1/سریع/ERR908/ERR908507/ERR908507_1.سریع.gz, FTP://FTP.SRA.ابو.ac.uk/جلد 1/سریع/ERR908/ERR908507/ERR908507_2.سریع.gz]] [ERR908506, [FTP://FTP.SRA.ابو.ac.uk/جلد 1/سریع/ERR908/ERR908506/ERR908506_1.سریع.gz, FTP://FTP.SRA.ابو.ac.uk/جلد 1/سریع/ERR908/ERR908506/ERR908506_2.سریع.gz]] [ERR908505, [FTP://FTP.SRA.ابو.ac.uk/جلد 1/سریع/ERR908/ERR908505/ERR908505_1.سریع.gz, FTP://FTP.SRA.ابو.ac.uk/جلد 1/سریع/ERR908/ERR908505/ERR908505_2.سریع.gz]] 

هر جفت خوانده شده به طور ضمنی به عنوان لیستی از پرونده ها بازگردانده می شود.

این روش از API NCBI ESEARCH در پشت صحنه استفاده می کند ، بنابراین امکان استفاده از هر اصطلاح پرس و جو پشتیبانی شده توسط این API را فراهم می کند.

جدول پارامترهای اختیاری موجود:

کلید API کاربر NCBI.

درخواست های Caching API را فعال یا غیرفعال کنید (پیش فرض: درست).

حداکثر تعداد ورودی هایی که می توانند مجدداً مورد استفاده قرار گیرند (پیش فرض: نامحدود).

اجازه انتخاب پروتکل برای URL های از راه دور حاصل را بدهید. گزینه های موجود: FTP ، HTTP ، HTTPS (پیش فرض: FTP).

برای دسترسی به سرویس جستجوی NCBI ، کلیدهای API NCBI نیز باید ارائه شود:

  • با استفاده از پارامتر اختیاری apikey به عنوان مثالکانال
  • صادرات متغیر NCBI_API_KEY در محیط شما به عنوان مثالصادرات NCBI_API_KEY = 0123456789ABCDEF.

از

این ویژگی نیاز به نسخه NextFlow 19. 10. 0 از بعد دارد.

روش به شما امکان می دهد کانال ایجاد کنید که آرگومان های ارائه شده به آن را منتشر کند ، به عنوان مثال:

ch = کانال.of( 1, 3, 5, 7 ) ch.چشم انداز  "ارزش: $ it" > 

خط اول در این مثال یک متغیر CH را ایجاد می کند که یک شیء کانال را در خود جای داده است. این کانال استدلال های ارائه شده به روش را منتشر می کند. بنابراین خط دوم موارد زیر را چاپ می کند:

ارزش: 1 ارزش: 3 ارزش: 5 ارزش: 7 

محدوده مقادیر بر این اساس گسترش می یابد:

کانال .of(1.. 23, 'ایکس', 'Y') .چشم انداز() 
1 2 3 4 : 23 X Y 

همچنین ببینید: روش کارخانه FromList.

ارزش

از روش مقدار برای ایجاد یک کانال ارزش استفاده می شود. یک آرگومان اختیاری (نه تهی) را می توان برای اتصال کانال به یک مقدار خاص مشخص کرد. مثلا:

usp1 = کانال.ارزش() usp2 = کانال.ارزش( 'سلام' ) 33 = کانال.ارزش( [1,2,3,4,5] ) 

خط اول در مثال یک متغیر "خالی" ایجاد می کند. خط دوم یک کانال ایجاد می کند و رشته ای را به آن متصل می کند. خط سوم یک کانال ایجاد می کند و یک شیء لیست را به آن متصل می کند که به عنوان یک مقدار واحد ساطع می شود.

WatchPathuf0c1

روش WatchPath پوشه ای را برای یک یا چند پرونده مطابق با یک الگوی مشخص مشاهده می کند. به محض اینکه پرونده ای وجود داشته باشد که شرایط مشخص شده را برآورده کند ، از طریق کانال منتشر می شود که با روش WatchPath بازگردانده می شود. شرط تماشای پرونده ها با استفاده از * یا؟شخصیت های Wildcard یعنی با مشخص کردن معیارهای مطابقت با مسیر GLOB.

کانال .راه دور( '/path/*. fa' ) .اشتراک در  چاپل "پرونده Fasta: $ it" > 

به طور پیش فرض فقط برای پرونده های جدید ایجاد شده در پوشه مشخص شده تماشا می کند. به صورت اختیاری ، می توان یک استدلال دوم را ارائه داد که مشخص می کند چه رویداد (بازدید) را تماشا می کند. رویدادهای پشتیبانی شده عبارتند از:

یک فایل جدید ایجاد شده است (پیش فرض)

یک پرونده اصلاح شده است

یک پرونده حذف می شود

شما می توانید بیش از یکی از این رویدادها را با استفاده از رشته جدا شده کاما همانطور که در زیر نشان داده شده است مشخص کنید:

کانال .راه دور( '/path/*. fa', "ایجاد ، اصلاح" ) .اشتراک در  چاپل "پرونده ایجاد یا اصلاح شده: $ it" > 

کارخانه WatchPath بی وقفه منتظر پرونده هایی است که با الگوی و رویداد مشخص شده مطابقت دارند ، به این معنی که باعث می شود خط لوله شما برای همیشه اجرا شود. در هنگام برآورده شدن شرایط خاص ، از اپراتور تا زمانی که کانال را ببندید استفاده کنید (به عنوان مثال دریافت پرونده ای به نام Done).

همچنین ببینید: روش کارخانه FromPath.

روشهای کانال

اتصال

روش Bind دیگر در نحو DSL2 در دسترس نیست.

اشیاء کانال یک روش Bind () را ارائه می دهند که عملیاتی اصلی برای ارسال پیام از طریق کانال است. مثلا:

کانال من = کانال.ايجاد كردن() کانال من.بستن( 'سلام دنیا' ) 
گزینه های باینری...
ما را در سایت گزینه های باینری دنبال می کنید

برچسب : نویسنده : هایده حائری بازدید : <-PostHit-> تاريخ : يکشنبه 29 مرداد 1402 ساعت: 12:11